在Laravel Datatables中雄辩,在select中选择?
我有3个表,第一个表有第二个表的FK,第二个表有第三个表的FK:在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_
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();