【发布时间】:2017-09-10 23:42:06
【问题描述】:
使用 Laravel 4.2,如何在不接触数据库的情况下将模型上的 hasOne 关系设置为新模型的实例?
我想做以下事情,但 Laravel 将实例视为属性,而不是子关系。
class ParentClass extends \Eloquent {
public function child() {
return $this-hasOne('ChildClass', 'child_id', 'parent_id');
}
}
$parent = new ParentClass();
$parent->child = new ChildClass();
【问题讨论】:
-
我已经有一段时间没有使用 laravel 了,但你能做到
$parent = new ParentClass(); $parent->child()->create();吗?实际上,我现在没有安装来测试它,但$parent->child() = new ChildClass();也可以工作。您可能只是缺少括号。 -
感谢您的回复。 ->create() 想要保存到数据库。 ->child() 抛出错误'Can't use method return value in write context'。
-
好的,这个怎么样:
$child = new ChildClass(); $parent->child()->attach($child->id); -
->attach 是 BelongsToMany 的一部分,而不是 hasOne,所以很遗憾这不起作用。
-
对不起,你是对的。多读几遍后,似乎 eloquent 并不完全支持您尝试做的事情。尽管取决于您要做什么,但您可能能够足够接近。首先,如果您查看略低于此锚点 (laravel.com/docs/5.4/eloquent-relationships#the-save-method) 的文档,它们描述了
associate方法,该方法可用于将孩子与父母联系起来(尽管听起来您正在尝试另一种方式周围)。