【发布时间】:2017-10-07 07:42:41
【问题描述】:
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 列应为真或假。所以来自Stack 的返回,与finished 的关系应该如下所示。请注意,最后一个堆栈上的已完成列更改为 false,因为进度表中不存在该关系。
{
"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
},
【问题讨论】:
-
您能否从您的问题中更好地解释您要达到的目标?您想过滤用户“已完成”状态为“真”或“假”的所有堆栈?
-
用更多信息编辑了我的问题
标签: laravel laravel-5 eloquent