【发布时间】:2019-05-25 11:02:08
【问题描述】:
我有一个查询,我正在返回一个一对多的关系,我期望它们的关系都有两个结果。第一个结果正确返回,但在第一个结果之后,对于第一个结果之后的每个结果,我总是为我的关系数据获得一个 NULL 值。
如果我删除数据库中的第一条记录,那么第二条记录将成为第一条并且它会正确返回。
这是我的查询 -
$groups = DataGroup::where('post_id', $post->id)->with('data.dataType')->get();
数据组关系
public function data()
{
return $this->hasMany('App\Data', 'data_group_id');
}
数据关系
public function dataType()
{
return $this->belongsTo('App\DataTypes', 'id');
}
public function dataGroup()
{
return $this->belongsTo('App\DataGroup', 'id');
}
数据类型关系
public function data()
{
return $this->hasMany('App\Data', 'data_types_id');
}
结果集(为了便于阅读,去掉了其他信息)
Collection {#259 ▼
#items: array:2 [▼
0 => Data {#272 ▼
#fillable: array:5 [▶]
#attributes: array:8 [▶]
#original: array:8 [▶]
#relations: array:1 [▼
"dataType" => DataTypes {#271 ▶}
]
}
1 => Data {#268 ▼
#fillable: array:5 [▶]
#attributes: array:8 [▶]
#original: array:8 [▶]
#relations: array:1 [▼
"dataType" => null
]
数据组表
---------------------
| id | post_id |
--------------------
| 1 | 2 |
--------------------
数据类型表
---------------------
| id | label | name |
--------------------
| 1 | Text | text |
--------------------
数据表
------------------------------------------------------------
| id | data_types_id | data_group_id | field_label | value |
------------------------------------------------------------
| 1 | 1 | 1 | Title | NULL |
------------------------------------------------------------
| 2 | 1 | 1 | Sub Heading | NULL |
【问题讨论】:
-
您可以尝试按以下顺序运行代码吗:
$groups = DataGroup::with('data.dataType')->where('post_id', $post->id)->get();我过去注意到这会产生不同的结果(在 where 之前使用)。如果失败了,你能告诉我们你的数据库数据吗?(也许写一个带有连接的查询并向我们展示结果应该是什么:)) -
谢谢@RobBiermann 我厌倦了你的查询,但我仍然得到
null关系的价值,我已经用数据库表更新了我的问题。 -
感谢您的信息,它帮助我得出结论;)
标签: laravel laravel-5 eloquent