簡體   English   中英

如何在雄辯的Laravel中與三個表進行協商

[英]how to make consultation with three tables in Eloquent Laravel

我有以下三個用戶表, mapasmarcadores

一個用戶有幾個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標准方法是從UserMarcadores建立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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM