Красноречивый в Laravel-Datatables, выберите в select?

У меня есть 3 таблицы, 1-й имеет FK от 2-го, а 2-й имеет FK от 3-го:

Table 1: [admin_demandas]
-------------------------
id_demanda|   projec_id
-------------------------

Table 2: [admin_projec]
-------------------------
id_projec |   sub_id
-------------------------

Table 3: [admin_sub]
-------------------------
id_sub    |   name
-------------------------

Что мне нужно, это получить "имя" из таблицы 3, но начиная с модели таблицы 1.

Я пытался что-то вроде этого:

$data = AdminDemanda::select([
    'id_demanda',
    'admin_projec.sub_id AS sub_id',
    'admin_sub.name AS name',])
    ->join('admin_projec', 'admin_demandas.projec_id', '=', 'admin_projec.id_projec')
    ->join('admin_sub', 'admin_projec.sub_id', '=', 'admin_sub.id_sub')
    ->get();

return Datatables::of($data)->make(true);

Я сделал свои Datatables только с 1 JOIN (2 таблицы), но не уверен, как сделать эти 2 JOIN (3 таблицы). Я получил эту ошибку:

[Err] 1054 - Unknown column 'admin_projec.sub_id' in 'on clause'

Что я должен изменить в своем запросе? Нужно ли мне использовать построитель запросов вместо Eloquent с запросом DB::raw()?

2 ответа

Решено с этим:

Внутреннее объединение трех таблиц в MySQL

это было просто... теперь, если кому-то это нужно, мой запрос к данным:

$datos = AdminDemanda::select([
    'id_demanda',
    'admin_dis.nombre AS nombre_dist',
    'admin_sub.nombre AS nombre_subes',
    'mes AS mes_demanda',
    'admin_sistemas.nombre AS nombre_sistema',
    'admin_demandas.demanda_mwh AS mwh'])
    ->join('admin_projec', 'admin_demandas.proyeccion_demanda_id', '=', 'admin_projec.id_proyeccion_demanda')
    ->join('admin_sub', 'admin_projec.subestacion_id', '=', 'admin_sub.id_subestacion')
    ->join('admin_dis', 'admin_projec.dist_id', '=', 'admin_dis.id_dist')
    ->join('admin_sistemas', 'admin_projec.sistema_id', '=', 'admin_sistemas.id_sistema')
    ->get();

Вы должны отредактировать свои модели

Например, в AdminSub модель

public function projec(){
    return $this->hasMany(AdminProjec::class , 'sub_id');
}

Вы должны быть в состоянии сделать

\AdminSub::first()->projec();

И продолжайте редактировать ваши AdminProjec модель с такими же отношениями

public function demandas(){
    return $this->hasMany(AdminDemandas::class , 'projec_id');
}

И теперь вы можете попробовать

//I do not remember which one will works
\AdminSub::first()->projec()->first()->demandas()->name
//or 
\AdminSub::first()->projec()->first()->demandas()->get()->name 
Другие вопросы по тегам