Stack
模型可以有“用户进度”,用户可以“清除”堆栈。并且该进度存储在Progress
模型中。返回一个布尔值而不是整个集合
Progress
型号:
public function stack(){
return $this->belongsTo(Stack::class);
}
这将是整齐的,如果有可能获取所有堆栈,如果用户已经“清除”与否,有一个布尔值true或false。我不会不取回与进度相对应的所有数据。所以,我试图建立在Stack
模型
public function finished(){
return $this->hasOne(Progress::class) ? true : false;
}
“已完成”的关系,但这种设置使我有以下错误 Call to a member function addEagerConstraints() on boolean
。
这是我如何调用的关系,此刻
$user = \App\Stack::with(['finished' => function($q){
return $q->where('user_id', auth()->user()->id);
}])->get();
但返回的整个集合,这是没有必要的。预期的结果应该是这样的:
{
"id": 5,
"user_id": 2,
"subject_id": 2,
"name": "tstar igen",
"slug": "tstar-igen",
"description": "asdasd",
"image": null,
"created_at": "2017-10-06 08:27:36",
"updated_at": "2017-10-06 08:27:36",
"finished": true/false
},
因此,可以说,这里是在上面堆的关系进入在进度表。
+----+---------+----------+
| id | user_id | stack_id |
+----+---------+----------+
| 1 | 1 | 5 |
+----+---------+----------+
所以当提取堆栈时,关系完成。 finished
列应该是true或false。所以从Stack
返回,关系finished
应该如下。请注意,最后一个堆栈中已完成的列已更改为false,因为关系在进度表中不存在。当你需要检查你可以使用has
或whereHas
关系法
public function finished(){
return $this->hasOne(Progress::class);
}
然后:
{
"id": 5,
"user_id": 2,
"subject_id": 2,
"name": "tstar igen",
"slug": "tstar-igen",
"description": "asdasd",
"image": null,
"created_at": "2017-10-06 08:27:36",
"updated_at": "2017-10-06 08:27:36",
"finished": true
},
{
"id": 6,
"user_id": 2,
"subject_id": 2,
"name": "another stack",
"slug": "another-stack",
"description": "This is a test stack for all the stacks out there",
"image": null,
"created_at": "2017-10-06 08:27:36",
"updated_at": "2017-10-06 08:27:36",
"finished": false
},
你能解释一下你的问题你试图达到什么吗?你想过滤所有用户的“完成”状态为“真”或“假”的堆栈? –
编辑我的问题的更多信息 – Adam