Laravel hasMany关系上的查询生成器

Laravel hasMany关系上的查询生成器,laravel,laravel-5,eloquent,Laravel,Laravel 5,Eloquent,问题 我正在用Laravel创建一个API。每个服务器可以有多个联系人,并且每个联系人都属于一个服务器-因此,联系人设置为belongsTo关系,并且服务器与联系人有多个关系 一个用户可以通过其hasMany关系拥有多个服务器。因此,在创建服务器时,我们只需调用$user->server()->create([values]),这样就可以了 问题是,当我们试图进一步调用它时,就像使用联系人一样,我们遇到了一堵墙: 调用undefined method\Database\Query\Builder

问题

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

一个用户可以通过其
hasMany
关系拥有多个服务器。因此,在创建服务器时,我们只需调用
$user->server()->create([values])
,这样就可以了

问题是,当我们试图进一步调用它时,就像使用联系人一样,我们遇到了一堵墙:

调用undefined method\Database\Query\Builder::contacts()

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

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

调用
$user->contact()->create([])
时,我们会得到:

调用undefined method\Database\Query\Builder::create()

有人知道是什么导致了这一切吗?查询生成器是否不允许这种类型的链接,或者我是否遗漏了一些显而易见的东西?正如你所看到的,我尝试了几种不同的方法,但似乎没有产生效果

干杯

正如你所说:

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

因此,您不能在可以返回许多结果的关系上构建另一个关系(因为最后我们不知道应该在contact new record中设置哪个服务器id)

因此,您可以做的是评估:

foreach ($user->server as $server) {
    $server->contacts()->create($values);
}
您看到了:现在您有了id为的特定服务器,可以放入新的联系人记录中

正如你所说:

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

因此,您不能在可以返回许多结果的关系上构建另一个关系(因为最后我们不知道应该在contact new record中设置哪个服务器id)

因此,您可以做的是评估:

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

您看到了:现在您有了id为的特定服务器,可以放入新的联系人记录中

我很确定您不能通过
hasManyThrough
创建。Laravel通过“用户”给出了这种“邮政”和“国家”关系的例子。如果一个帖子的用户是某个国家的一部分,那么该帖子可以属于该国。通过这种逻辑,你试图从一个职位上创建一个国家。看起来不对。@Jaw.sh这很有道理——但为什么它不能通过HasMany工作呢?我不知道。Laravel5.2API说,
有许多
关系有一个
create()
函数。还有别的问题。(但是,正如所料,
HasManyThrough
没有。)我很确定您无法通过
HasManyThrough
创建。Laravel通过“用户”给出了这种“邮政”和“国家”关系的例子。如果一个帖子的用户是某个国家的一部分,那么该帖子可以属于该国。通过这种逻辑,你试图从一个职位上创建一个国家。看起来不对。@Jaw.sh这很有道理——但为什么它不能通过HasMany工作呢?我不知道。Laravel5.2API说,
有许多
关系有一个
create()
函数。还有别的问题。(但是,正如预料的那样,
有很多错误,而
没有。)你当然是对的!我走的路线是:
$srv=$user->server()->find($server\u id)
,然后通过
$srv->contacts()->create([])
创建了联系人,这立即奏效。干杯你当然是对的!我走的路线是:
$srv=$user->server()->find($server\u id)
,然后通过
$srv->contacts()->create([])
创建了联系人,这立即奏效。干杯