我不太确定我是否理解Laravel中的associate方法。我理解这个想法,但我似乎无法让它发挥作用。
使用此(蒸馏)代码:
class User
{
public function customer()
{
return $this->hasOne('Customer');
}
}
class Customer
{
public function user()
{
return $this->belongsTo('User');
}
}
$user = new User($data);
$customer = new Customer($customerData);
$user->customer()->associate($customer);
当我尝试运行时,我得到Call to undefined method Illuminate\Database\Query\Builder::associate()
。
从我可以阅读的内容来看,我完全按照文档中的说明进行操作。
我做错了什么?
答案 0 :(得分:30)
我必须承认,当我第一次开始使用Laravel时,我必须一直引用文档的部分之间的关系,甚至在某些情况下我还没有完全正确。
为了帮助您,associate()
用于更新belongsTo()
关系。查看代码,$user->customer()
返回的类是hasOne
关系类,并且不会有关联方法。
如果你反过来这样做的话。
$user = new User($data);
$customer = new Customer($customerData);
$customer->user()->associate($user);
$customer->save();
它可以正常工作$customer->user()
是一种belongsTo
关系。
要做到这一点,反过来要先保存用户模型,然后将客户模型保存到它,如:
$user = new User($data);
$user->save();
$customer = new Customer($customerData);
$user->customer()->save($customer);
编辑:可能没有必要先保存用户模型,但我总是这样做,不知道为什么。
答案 1 :(得分:5)
根据我的理解,->associate()
可以在BelongsTo关系上调用onyl。因此,在您的示例中,您可以执行$customer->user()->associate($user)
。但是,为了“联想”。您使用的{* 1}}具有*关系,因此您的代码应为->save()