как сделать консультацию с тремя столами в Eloquent Laravel - PullRequest
0 голосов
/ 22 октября 2018

У меня есть три таблицы: пользователи , mapas , marcadores

A пользователь имеет несколько mapas

a mapa имеет несколько marcadores

Я пытаюсь показать marcadores, которые принадлежат mapas пользователя, который вошел в систему.

это таблицы и отношения

enter image description here

Это функция контроллера, над которой я работаю:

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

спасибо за вашу помощь

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Для этого вы можете использовать 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'));
}
0 голосов
/ 23 октября 2018

Самый простой и стандартный способ Laravel - это создать отношение hasManyThrough от User до Marcadores

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]);
}
0 голосов
/ 22 октября 2018

Вы пытаетесь сначала получить все идентификаторы mapas , а затем фильтровать marcadores в соответствии с этими идентификаторами.Попробуйте использовать код ниже для этого:

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'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...