无法让Laravel员工工作

Mat*_*ijn 22 php relational-database relationship laravel eloquent

我不太确定我是否理解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);
Run Code Online (Sandbox Code Playgroud)

Call to undefined method Illuminate\Database\Query\Builder::associate()当我尝试运行时,我得到了一个.

从我可以阅读的内容来看,我完全按照文档中的说明完成.

我究竟做错了什么?

Dav*_*ker 36

我不得不承认,当我第一次开始使用Laravel时,我不得不一直引用文档的关系,甚至在某些情况下,我也没有完全正确.

为了帮助您,associate()用于更新belongsTo()关系.查看您的代码,返回的类$user->customer()是一个hasOne关系类,并且不会有关联方法.

如果你反过来这样做的话.

$user = new User($data);
$customer = new Customer($customerData);

$customer->user()->associate($user);
$customer->save();
Run Code Online (Sandbox Code Playgroud)

这将$customer->user()是一种belongsTo关系.

要做到这一点,你可以先保存用户模型,然后将客户模型保存到它,如:

$user = new User($data);
$user->save();

$customer = new Customer($customerData);
$user->customer()->save($customer);
Run Code Online (Sandbox Code Playgroud)

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


ale*_*ell 5

据我了解,->associate()可以在BelongsTo关系上调用onyl.所以,在你的例子中,你可以做到$customer->user()->associate($user).但是,为了"关联"您使用的Has*关系->save(),所以您的代码应该是$user->customer()->save($customer)

  • 对于多对多方法(参见文档 https://laravel.com/docs/5.3/eloquent-relationships#updating-many-to-many-relationships),您使用 `->attach()` 和 `->detach ()`。例如 `$post->tags()->attach($tag);` 现在,正式地,attach 和 detach 方法只接受 ID,但是当我前段时间在 4.x 上测试时,你可以将实际模型传入. 这可能在 5.x 中发生了变化。 (2认同)