我有這兩個表:apps并且categories,它們處于 M:M 關系中,我有apps_categories表和BelongsToMany()模型中的關系,它們作業正常。
現在,我以一種形式顯示應用程式中的所有記錄,但我想根據 進行過濾category_id,因此我有一個$categories陣列來存盤過濾器。
我的問題是使用DB門面解決的,如下所示:
$apps = DB::table('apps')
->join('apps_categories', 'apps.id', '=', 'app_id')
->whereIn('category_id', $categories)
->select('apps.*')
->get();
所以,我想知道是否有更好的方法,只使用 ORM。事情是我有另一個表與 M:M 關系apps,我假設使用 ORM 將是處理這兩種關系的更好方法
uj5u.com熱心網友回復:
您可以為此使用whereHas方法:
$apps = App::whereHas('categories', function ($query) use($categories) {
$query->whereIn('categories.id', $categories);
})->get();
與上面相同,但使用箭頭函式:
$apps = App::whereHas('categories', fn ($query) => $query->whereIn('categories.id', $categories))->get()
的第一個引數whereHas是您用于模型中關系的方法名稱 ( categories),第一個引數whereIn是表名和欄位 ( categories.id)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330773.html
下一篇:Laravel多對多關系不起作用
