如何与Eloquent Laravel的三张桌子进行咨询

I have three tables that are the following users, mapas, marcadores

A user has several mapas

a mapa has several marcadores

What I'm trying to do is show the marcadores that belong to the mapas of the user who has logged in.

this are the tables and relationship

enter image description here

This is the function in the controller that I am working on:

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'));
}

thanks for your help

You are trying to get all the mapas id first and then filter marcadores according to those id's. Try using the code below for that:

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'));
}

You can use JOINS for this. Try the next code (maybe the syntax is not the correct one, but take the idea):

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'));
}

The easiest and Laravel standard way to do this is create a hasManyThrough relationship from User to Marcadores

UserModel

class User extends Model
{
    public function marcadores()
    {
        return $this->hasManyThrough(Marcadores::class, Mapas::class);
    }
}

Controller

public function index()
{
    $marcadores = auth()->user()->marcadores;
    return view('user.marcadores.index', ['marcadores' => $marcadores]);
}