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