无法让 Laravel 员工上班

我不太确定我是否理解Laravel中的关联方法。我理解这个想法,但我似乎无法让它发挥作用。

使用此(蒸馏)代码:

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

从我能读到的内容来看,我完全按照文档中所述的方式进行操作。

我做错了什么?


答案 1

我不得不承认,当我第一次开始使用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);

编辑:可能没有必要先保存用户模型,但我总是这样做,不知道为什么。


答案 2

据我所知,只能在属于关系上调用。因此,在您的示例中,您可以执行 .但是,为了“关联”您使用的 Has* 关系,因此您的代码应该是->associate()$customer->user()->associate($user)->save()$user->customer()->save($customer)


推荐