在Laravel Datatables中雄辩,在select中选择?

在Laravel Datatables中雄辩,在select中选择?,laravel,eloquent,yajra-datatable,Laravel,Eloquent,Yajra Datatable,我有3个表,第一个表有第二个表的FK,第二个表有第三个表的FK: Table 1: [admin_demandas] ------------------------- id_demanda| projec_id ------------------------- Table 2: [admin_projec] ------------------------- id_projec | sub_id ------------------------- Table 3: [admin_

我有3个表,第一个表有第二个表的FK,第二个表有第三个表的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个联接2个表来完成数据表,但不确定如何执行这2个联接3个表。我得到了这个错误:

[Err] 1054 - Unknown column 'admin_projec.sub_id' in 'on clause'
我应该在查询中修改什么?
我是否需要使用查询生成器来代替雄辩的DB::raw查询?

您应该编辑您的模型

通过AdminSub模型中的示例

你应该能做到

\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 
解决方法如下:

很简单。。。如果有人需要,我的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();

我放的代码是一个例子,第二个表有4个FK指向另一个表,有没有其他方法来进行查询而不是编辑模型?这个模型还能用吗?谢谢,我稍后会尝试。我认为使用模型是处理数据库关系的最佳方式。因为你只设置了一次,任何东西都可以随时使用。如果更改字段名的表名,只需编辑一些内容即可使其运行。如果将完整查询与联接一起使用,则必须编辑使用此表/字段的每个页面,一旦应用程序变大,这将是一场真正的噩梦。很高兴您已经解决了这个问题。为了获得最佳实践,请稍后以雄辩的方式及时解决此问题。它将比@Raccoon建议的使用大量连接要好得多。它最终会使所有这些表之间的关系更容易理解。谢谢,我试了很多次,但都没能理解。但我知道,我必须利用拉雷维尔提供的优势
$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();