Laravelドキュメントは、hasManyThrough
宣言が2つのレベル「深い」関係にしか使用できないことを示しているようです。もっと複雑な関係はどうですか?たとえば、User
には、多くの場合、Subject
があり、そのそれぞれは、多くの場合、Deck
で、多くはです。 User
に属するすべてのDeck
は、hasManyThrough
宣言を使用して取得するのは簡単ですが、User
に属するすべてのCard
はどうなりますか?より深い関係にhasManyThroughを適用する
4
A
答えて
1
コメントに記載されているとおり、hasManyThrough
はこのレベルの特異性をサポートしていません。私たちは、Cards -> Decks -> Subjects
からつもり
//App\User;
public function cards()
{
Card::whereHas('decks', function($q){
return $q->whereHas('subjects', function($q){
return $q->where('user_id', $this->id);
});
});
}
:あなたができることの一つは、反対方向に行くクエリビルダインスタンスを返すことです。 subjects
には、user_id
の列が必要です。
ユーザーモデルから呼び出された場合、それはthussly行われることになります。
$user->cards()->get();
0
まあ、実際には最善の解決策は、カードの表に余分な列配置されます - あなたが取得するので、頻繁なニーズを持っている場合、USER_IDをユーザーのためのすべてのカード。
Laravelは2深度関係のHas-Many-Through関係を提供します。これは非常によく使用される関係であるためです。 Laravelがサポートしていない関係については、あなた自身で最良のテーブル関係を把握する必要があります。
あなたの目的のために、次のコードスナップを使用して、現在のリレーションモデルで、ユーザーのすべてのカードを取得できます。
public function decks()
{
return $this->hasManyThrough('Deck', 'Subject');
}
- デッキ時間:
昇天
- ユーザーは、だから、プロジェクトのモデルは、次のコードを持っています
、デッキに
hasManyThough
関係を持っていますカード から
hasMany
関係
としてコード
$deck_with_cards = $user->decks()->with("cards")->get();
$cards = [];
foreach($deck_with_cards AS $deck) {
foreach ($deck->cards as $c) {
$cards[] = $c->toArray();
}
}
は今$cards
は$user
のためのすべてのカードを持っています。
関連する問題
- 1. Laravelの関係:hasManyThrough、belongsTo、belongsToMany
- 2. Laravel 5.5:MongoDBの&hasManyThrough()関係
- 3. 注文二hasManyThrough関係
- 4. ここで、関係はhasManyThroughでの関係を使用しています。
- 5. Laravel雄弁hasManyThrough関係+改ページ
- 6. ラーベル関係が深い
- 7. hasManyThroughタイプの関係を達成しようとしています
- 8. laravelでhasManyThrough関係を使用するモデルのDB接続が異なる5.1
- 9. REST API 1対多の深い関係
- 10. CakePHP - 深い関係からデータを取得する?次のように
- 11. Ectoの3レベルの深い関係 - どのようにプリロードするか
- 12. 関数をより深く深く引き渡す
- 13. laravel hasManyThroughの関係でゴミ箱モデルのrelatedModelレコードを取得する方法
- 14. REST APIで非常に深い関係を扱う
- 15. XPathは関係なく、深さ
- 16. UML図関係の理解を深めようとしています
- 17. LinqToSqlのオブジェクト関係を最適に割り当てる方法
- 18. HIbernate深度2の関係をロードする
- 19. hasManyThroughにエラーがあります
- 20. Cakephp 3 where節の深い包含関係にアクセスする方法は?
- 21. HasManyToMany NHibernate関係にユニーク制約を適用するにはどうすればよいですか?
- 22. パラメータタイプに関係なく、パラメータ化タイプでフィルタを適用するにはどうすればよいですか?
- 23. 1対nの関係を適用する方法
- 24. 特定のケースでLaravelの雄弁なhasManyThrough関係を使用できますか?
- 25. 深い再帰親子関係からのJSONの構築
- 26. Djangoの1.8深い逆の関係検索
- 27. MongoDBの - どのように適切にモデルとの関係
- 28. ボタンの内容の長さに関係なくスタイルを適用
- 29. Laravel HasManyThrough
- 30. 主キーのないリレーション(テーブル)は適切な関係になりますか?
[私はこの同じ質問をしました](http://stackoverflow.com/questions/25938081/distant-hasmanythrough)数年前です。 HasManyThroughは単なるショートカットです。現存するように、離れた関係にアクセスするための仕組みは組み込まれていません。 – maiorano84