在我的Laravel应用程序中,我有3个模型(配方,材料和保存)。
“食谱”与“食谱”之间的关系“材料”被设置为多对多。 “保存”的关系也是“材料”和“材料”的关系。 “食谱”,因此它被设置为“多态”。
我测试了不同调用中的关系,并且它们正常工作。我在这里寻找的是一个单一的调用,它可以检索这些模型的所有数据。目前我使用此电话:
配方::与( '材料', '保存条件') - >首先();
但这不会返回材料的“保存”。
使用最少的查询将所有数据放入单个变量的最佳方法是什么?
答案 0 :(得分:0)
感谢'deczo',可以像这样检索嵌套关系:
与( 'materials.preservations', '保存条件');
答案 1 :(得分:0)
我将解释Laravel中的所有关系并展示如何将它们全部解决:
一对一:
你必须在第一个模型上使用HasOne,在第二个模型上使用BelongsTo
在第一个模型(HasOne)上添加记录使用保存功能
$post->comments()->save($comment);
在第二个模型上添加记录(BelongsTo)使用关联函数
$user->account()->associate($account); $user->save();
一对一:
你必须在第一个模型上使用HasMany而在第二个模型上使用BelongsTo
在第一个表(HasMany)上添加记录使用save或saveMany函数
$post->comments()->saveMany($comments);
在第二个模型上添加记录(BelongsTo)使用关联函数
$user->account()->associate($account); $user->save();
多对多:
你必须在第一个模型上使用BelongsToMany,在第二个模型上使用BelongsToMany
要在数据透视表上添加记录,请使用附加或同步功能:
- 两个函数都接受单个ID或ID的数组
- 如果同步不存在于数据透视表上,则附加检查是否附加检查
:
你必须在主模型上使用MorphMany,在所有(***)模型上使用MorphTo
在所有其他模型上添加记录使用保存
$course->tags()->save($tag);
数据透视表应包含以下列:
- 主要型号ID
- (***)ID
- (***)类型
多态多数:
你必须在主模型上使用MorphByMany,在所有(***)模型上使用MorphToMany
在所有其他模型上添加记录使用save或saveMany
$course->tags()->save($tag);
$course->tags()->saveMany([$tag_1, $tag_2, $tag_3]);
数据透视表应包含以下列:
- 主要型号ID
- (***)ID
- (***)类型
中有很多通道(快捷方式):
你必须在第一个表上使用HasManyThrough,并在其他2个表上具有正常关系
这对于ManyToMany关系(其中有一个数据透视表)不起作用 然而,有一个很好的简单解决方案将被覆盖在其他地方。