无法让Laravel员工工作

时间:2014-10-02 12:19:17

标签: php laravel relational-database eloquent relationship

我不太确定我是否理解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()

从我可以阅读的内容来看,我完全按照文档中的说明进行操作。

我做错了什么?

2 个答案:

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