【发布时间】:2018-02-23 16:18:39
【问题描述】:
我有以下相关表格:
tableA
- id
- value
tableB
- id
- tableA_id
- value
tableC
- id
- tableB_id
- value
tableD
- id
- tableC_id
- value
我一般使用嵌套的eager loading从tableD中获取tableaA的对象,例如:
$table_d = TableD::with('TableC.TableB.TableA')->find($id);
我得到一个像这样的对象:
{
"id": 1,
"value": "value",
"tableC_id": 1,
"tablec": {
"id": 1,
"value": "value",
"tableB_id": 1,
"tableb": {
"id": 1,
"value": "value",
"tableA_id": 1,
"tablea": {
"id": 1,
"value": "value"
}
}
}
}
我想要实现的是只获取表D的对象,其对象与表A相关,而最终对象中没有表C和表B,如下所示:
{
"id": 1,
"value": "value",
"tablea": {
"id": 1,
"value": "value"
}
}
}
我尝试在表D的模型文件中添加这个函数:
public function TableA()
{
return $this->belongsTo('App\Models\TableC', 'tableC_id')
->join('tableB','tableC.tableB_id','=','tableB.id')
->join('tableA','tableB.tableA_id','=','tableA.id')
->select('tableA.id', 'tableA.value');
}
但它不起作用,因为当我执行以下查询时,它会返回一些好的对象和其他带有 tableA = null 的对象:
$tables_d = TableD::with('TableA')->get()
我做错了什么还是有其他方法可以实现我想要的?
【问题讨论】:
-
表之间的关系都是oneToOne吗?
-
@vpalade 所有属性都是 oneToMany
-
我在我的计算机上实现了你的代码,结果很好,我不明白“但它不起作用,因为当我执行以下查询时,它返回一些好的对象和其他带有 tableA = null:" 请解释一下你想要什么
-
好吧,发生在我身上的事情如下,假设我的数据库中有两个“tableA”对象(一个 id = 1,另一个 id = 2),这两个对象有相关的“ tableD”对象,当我从 tableD::with('tableA') 获取所有对象时,具有 id = 1 的“tableA”的“tableD”对象返回“tableA”很好,但是“tableD”有 id = 2 的“tableA”返回“tableA” = null,我的问题是什么理解? @Itisallyours
-
正如我所说,我已经实现了确切的代码,并像你说的那样为每个表插入了两条记录,表 A 没有空对象,再次检查你的代码以查看 id 是否正确设置
标签: php laravel eloquent laravel-5.5 laravel-eloquent