假設兩個 Model : A, B, 一對一關係,例如 A has B, B belongs A,當要撈出 A 中有 B 且符合 在 B 的篩選欄位條件。A 是 Post
貼文, B 是 Comment
評論,A 和 B 的更新日期時間欄位都是 u_date
, u_time
。
假設要撈出過去 24 小時內有更新評論的貼文,不需撈出評論。
ORM 寫法請寫成這樣:
A->whereHas('B', function ($query) {
return $query->where( function ($query) {
return $query->where('u_date', '=', $yesterday->format("Y-m-d"))
->where('u_time', '>=', $yesterday->format("H:i:s"));
})
->orWhere(function ($query) {
return $query->where('u_date', '=', $now->format("Y-m-d"))
->where('u_time', '<=', '$now->format("H:i:s")');
});
})->get();
以上 $now 和 $yesterday 使用 Carbon 套件, $yesterday 是由 $now 減一天得出的。
請切記要用 return
,如果你沒使用 return
,則 ORM 產生的 SQL where 條件比你想像的複雜,建議自行用 php artisan tinker
去驗證吧。