[英]how to make consultation with three tables in Eloquent Laravel
我有以下三個用戶表, mapas , marcadores
一個用戶有幾個mapas
一個mapa有幾個marcadores
我正在試圖做的是顯示屬於誰已經登錄的用戶的一舉成名的marcadores。
這是表格和關系
這是我正在使用的控制器中的功能:
public function index()
{
$mapas = Mapa::orderBy('id', 'DESC')->where('user_id', auth()->user()->id);
$marcadores = Marcador::orderBy('id', 'DESC')->where('mapa_id');
return view('user.marcadores.index', compact('marcadores'));
}
謝謝你的幫助
您正在嘗試先獲取所有mapas ID,然后根據這些ID過濾marcadore 。 為此,請嘗試使用以下代碼:
public function index()
{
$mapas = Mapa::orderBy('id', 'DESC')->where('user_id', auth()->user()->id)->pluck('id')->toArray();
$marcadores = Marcador::orderBy('id', 'DESC')->whereIn('mapa_id', $mapas)->get();
return view('user.marcadores.index', compact('marcadores'));
}
您可以為此使用JOINS 。 嘗試下一個代碼(也許語法不是正確的代碼,但是可以理解一下):
public function index()
{
$marks = DB::table('mapas')
->join('marcadores', 'marcadores.mapa_id', '=', 'mapas.id')
->where('mapas.user_id', auth()->user()->id)
->select('marcadores.*')
->orderBy('marcadores.id', 'DESC')
->get();
return view('user.marcadores.index', compact('marks'));
}
最簡單的Laravel標准方法是從User
到Marcadores
建立hasManyThrough
關系
的usermodel
class User extends Model
{
public function marcadores()
{
return $this->hasManyThrough(Marcadores::class, Mapas::class);
}
}
調節器
public function index()
{
$marcadores = auth()->user()->marcadores;
return view('user.marcadores.index', ['marcadores' => $marcadores]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.