2016-04-24 10 views
0

私は2つのテーブルを持っているイベントのリストを取得します:イベントと予約 は一つのイベントは、私は予約を持っていないイベントのリストを取得する必要があり、多くの予約最も人気のないイベント - 予約がnullであるか、LEAST

 
Event   Bookings 
    1    1 
    1    2 
    1    3 
    2    //consider this as no row in bookings table 
    3    4 
    3    5 
    3    6 
    4 

を持っていますつまり、予約テーブルにはevents_idの外部キー参照はありません。 ここにイベント2と4があります。 すべてのイベントにいくつかの予約がある場合は、予約が最も少ないイベントが表示されます。

いくつかの予約があるイベントのすべてのイベントと合計予約のリストを取得します。

どのように予約をしていないイベントデータを取得するのですか?

+1

約読み取りが – Strawberry

答えて

0

大丈夫です。だから、予約のないイベントを取得する必要がありますか?ここでいくつかのソリューションを見てみましょう。

私たちはEloquentをこのようなものに使うことができます。

あなたはメソッドが含まれているイベントモデルを考えてみましょう:

public function bookings() 
{ 
return $this->hasMany(Bookings::class, 'FK', 'PK'); 
} 

とメソッドが含まれている予約モデル:

public function event() 
{ 
return $this->belongsTo(Event::class, 'FK', 'PK'); 
} 

あなたはあなたの中にこのような何かを行うことができるだろうコントローラ:

$ events = Events :: whereHas( '予約') - > get() - > count();

これは、予約が結ばれたすべてのイベントのコレクションを取得し、カウントします。それは予約を持たないイベントのために雄弁に1つの問題を解決します。

Laravels Eloquent ORMにはhasNotメソッドがありませんが、必要な結果を得るためにEagarloading制約を使用できます。

$events = Events::whereHas("bookings", function($q) { 
    $q->whereNotNull('deleted_at'); 
}, '<', 1)->get(); 

私はそれはあなたの予約を持っていないすべてのイベントのコレクションを与えるべきと考えている:

は、我々のような何かを行うことによって予約されていないすべてのイベントをつかむことができます。

あなたはどのように乗っているか教えてください!

0

これも機能しますが、私はLeft Joinを使用してイベントテーブルからすべてのイベントを取得し、予約テーブルのイベントに一致するIDはありません。ここ はクエリです:

$least = Event::leftJoin('bookings', function($join) 
    { 
    $join->on('bookings.event_id', '=', 'events.id'); 
    }) 
    ->select('events.name') 
    ->whereNull('bookings.event_id') 
    ->first(); 

+0

うんに参加する持っている - > whereNull( '予約 - あなたが呼んでいるので、これは潜在的に、より効率的に説得力のあるソリューションよりも、上記と同じことを行い.event_id ') – ExohJosh

関連する問題