モデルは「ユーザーの進捗状況」を持つことができ、ユーザーはスタックをクリアできます。その進捗状況はProgress
モデルに保存されています。コレクション全体ではなくブール値を返します
Progress
モデル:
public function stack(){
return $this->belongsTo(Stack::class);
}
、すべてのスタックを取得することが可能であった場合、それはきちんとしただろう、とユーザーは、真または偽のブール値で、それを「クリア」またはされていない場合。私は進行状況に対応するすべてのデータを取得しないでください。だから私は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
},
あなたは達成しようとしていることをあなたの質問からうまく説明できますか?ユーザーの「完了」ステータスが「true」または「false」のすべてのスタックをフィルタリングしますか? –
詳細を含む私の質問を編集しました – Adam