首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Laravel-Datatables中雄辩,在select?

在Laravel-Datatables中雄辩,在select?
EN

Stack Overflow用户
提问于 2017-10-20 23:26:55
回答 2查看 1.2K关注 0票数 0

我有3个表,第一个是来自第二个的FK,第二个是来自第三个的FK:

代码语言:javascript
复制
Table 1: [admin_demandas]
-------------------------
id_demanda|   projec_id
-------------------------

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

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

我需要的是从表3中获取'name‘,但从表1的模型开始。

我试着这样做:

代码语言:javascript
复制
$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个表)。我得到了这个错误:

代码语言:javascript
复制
[Err] 1054 - Unknown column 'admin_projec.sub_id' in 'on clause'

我应该在我的查询中修改什么?对于DB::raw()查询,我是否需要使用查询构建器而不是Eloquent?

EN

回答 2

Stack Overflow用户

发布于 2017-10-21 03:42:16

解决了这个问题:

Inner join between three tables in mysql

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

代码语言:javascript
复制
$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();
票数 1
EN

Stack Overflow用户

发布于 2017-10-20 23:37:00

您应该编辑模型

通过AdminSub模型中的示例

代码语言:javascript
复制
public function projec(){
    return $this->hasMany(AdminProjec::class , 'sub_id');
}

你应该能够做到

代码语言:javascript
复制
\AdminSub::first()->projec();

并继续编辑具有相同关系的AdminProjec模型

代码语言:javascript
复制
public function demandas(){
    return $this->hasMany(AdminDemandas::class , 'projec_id');
}

现在你可以试着

代码语言:javascript
复制
//I do not remember which one will works
\AdminSub::first()->projec()->first()->demandas()->name
//or 
\AdminSub::first()->projec()->first()->demandas()->get()->name 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46852389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档