Laravel关系并得到它们

时间:2014-07-04 11:39:11

标签: laravel laravel-4 eloquent

在我的Laravel应用程序中,我有3个模型(配方,材料和保存)。

“食谱”与“食谱”之间的关系“材料”被设置为多对多。 “保存”的关系也是“材料”和“材料”的关系。 “食谱”,因此它被设置为“多态”。

我测试了不同调用中的关系,并且它们正常工作。我在这里寻找的是一个单一的调用,它可以检索这些模型的所有数据。目前我使用此电话:

  

配方::与( '材料', '保存条件') - >首先();

但这不会返回材料的“保存”。

使用最少的查询将所有数据放入单个变量的最佳方法是什么?

2 个答案:

答案 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 - (***)类型

多态多数:
你必须在主模型上使用MorphBy​​Many,在所有(***)模型上使用MorphToMany

在所有其他模型上添加记录使用save或saveMany

$course->tags()->save($tag);
$course->tags()->saveMany([$tag_1, $tag_2, $tag_3]);

数据透视表应包含以下列:
- 主要型号ID
- (***)ID - (***)类型

中有很多通道(快捷方式):
你必须在第一个表上使用HasManyThrough,并在其他2个表上具有正常关系

这对于ManyToMany关系(其中有一个数据透视表)不起作用 然而,有一个很好的简单解决方案将被覆盖在其他地方。