2017-10-21 125 views
1

希望你們都做得很好。是否可以使用where子句獲取數據與子關係laravel

我剛剛從CI搬到了Laravel。

我有兩個表 - 預訂 - Booked_Rooms

我想要的是,如果所有的房間都checked_out我會用Booked_Rooms.checkout_at決定爲null,則父記錄應該從數據集中排除。

我試過谷歌,做了一點研究,但無法找到我實際上看。

我也試過Booking:with(array('rooms',function($q){ // where query })),但它仍然提取父記錄。我不想循環遍歷每條記錄,然後排除記錄,因爲它對性能度量不太合適。我也知道我可以通過使用加入來做到這一點,但是我可以使用Eloquent ORM來做到這一點:

摘要:如果所有已預訂房間的所有checkout_at列都不爲空,那麼父預訂記錄被視爲已完成,在等待預訂。

HtlBooking模型類

public function rooms() 
{ 
    return $this->hasMany('App\BookedRoom','booking_id'); 
} 

控制器功能

$bookings = HtlBooking::with ('rooms')->with ('user') 
     ->get(); 

回答

2

找到我的答案,只需使用

$bookings = HtlBooking::with('rooms')->whereHas('rooms',function($q){$q->where('checkout_at',null);})->with ('user') 
     ->get(); 
做到了