使用Eloquent手动注入模型关系

31

如何将一个模型添加到另一个模型的关系数组中?

例如:

  • Domain 属于 Owner。
  • Owner 拥有一个 Domain。
  • 我有 $domain(Domain 的实例)。
  • 我有 $owner(Owner 的实例)。

我想将 $domain 添加到 $owner->relations[] 中,这样后面可以直接使用 $owner->domain

这么做的原因是在一个特定的控制器中,我只需要每个模型的部分数据集,因此使用联接查询来进行查询以提高性能,然后填充模型。

为了可读性,我想使用 $owner->domain->id 等等。

$domain->owner()->associate($owner); 会给我一个 $domain->owner 选项。

但我无法弄清相反的版本。

$owner->domain()->associate($domain)
$owner->domain()->attach($domain)

两者都会导致以下致命错误:

Call to undefined method Illuminate\Database\Query\Builder::[attach|associate]()

NB: 我不想保存任何东西,因为我已经加载了所有需要的数据。

1个回答

61

setRelation() 应该可以使用。它会将值设置在 relations 数组中。

$owner->setRelation('domain', $domain);

在设置一对多关系时,您可能需要使用values()方法:

$owner->setRelation('domains', $domains->values());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接