0

我有 3 张桌子,第 1 张桌子有第 2 张桌子的 FK,第 2 张桌子有第 3 张桌子的 FK:

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

我只用 1 个 JOIN(2 个表)完成了我的数据表,但不知道如何做这 2 个 JOIN(3 个表)。我收到了这个错误:

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

我应该在查询中修改什么?我是否需要使用查询生成器而不是 Eloquent 和 DB::raw() 查询?

4

2 回答 2

1

解决了这个问题:

mysql中三个表之间的内连接

这很简单......现在如果有人需要它,我的 Datatable 查询是:

$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();
于 2017-10-20T19:42:15.630 回答
0

你应该编辑你的模型

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 
于 2017-10-20T15:37:00.370 回答