hasMany关系

时间:2016-05-02 15:23:10

标签: laravel laravel-5 eloquent

问题

我正在使用Laravel创建API。每个服务器都可以有多个联系人,每个联系人都属于一个服务器 - 因此,联系人设置为belongsTo关系,服务器与联系人之间的关系为hasMany

用户可以通过hasMany关系拥有多台服务器。因此,在创建服务器时,我们只需调用$user->server()->create([values]),它就可以正常工作。

问题在于,当我们尝试进一步调用它时,就像联系人一样 - 我们碰到了一堵墙:

Call to undefined method Illuminate\Database\Query\Builder::contacts()

使用时:$user->server()->contacts()->create([])

方法存在于服务器模型中。 我们在用户模型上也有一个hasManyThrough关系,指定用户通过服务器有很多联系人。

在致电$user->contact()->create([])时,我们改为:

Call to undefined method Illuminate\Database\Query\Builder::create()

有没有人知道可能导致这种情况的原因?查询构建器不允许这种类型的链接,还是我错过了一些明显的东西?正如您所看到的,我尝试了一些不同的方法,但似乎无法产生效果。

干杯!

1 个答案:

答案 0 :(得分:0)

正如你所说:

  

用户可以通过hasMany关系拥有多台服务器。

所以你不能在关系上建立另一个可以返回很多结果的关系(因为最后我们并不知道我们应该在联系新记录时设置哪个服务器ID)。

所以你能做的就是完成:

foreach ($user->server as $server) {
    $server->contacts()->create($values);
}

您会看到:现在您已将具有ID的特定服务器放入新的联系人记录中。