Laravel查询构建器在明确位于数据库中时返回NULL结果

时间:2016-05-15 16:05:37

标签: laravel eloquent query-builder

查询:

$posts = $this->post->with('games', 'console')->take($limit)->get();

所以实际上转储我在第4个条目上看到的$ post ...它返回NULL

["relations":protected]=>
  array(2) {
    ["games"]=>
    NULL

前3个返回值。但是接下来的第四个都是返回NULL。我再次在游戏桌中只有3个值

Games Table:
1 | game 1
2 | game 2
3 | game 3

实际上在第三个条目上,它的值为2但显示游戏3名称

posts table: 
id | game id
1 | 3
2 | 2
3 | 3 (but showing "game 1" text)
4 | 3 (anything from 4 on returns NULL)

关系:

Game
public function Post()
{
    return $this->hasMany('App\Post', 'game_id');
}

Post
public function console()
{
    return $this->belongsTo('App\Console', 'id');
}

public function games()
{
    return $this->belongsTo('App\Game', 'id');
}

Console
public function Post()
{
    return $this->hasMany('App\Post', 'console_id');
}

2 个答案:

答案 0 :(得分:0)

试试这个:

Post

public function games()
{
   return $this->hasOne('App\Game', 'id', 'game_id');
}

答案 1 :(得分:0)

在您的Post课程中,您使用的关系为games错误。

首先,它应该被称为game单数,因为Post只属于一个Game。但是,它可以复数形式。

然后,真正的问题是你宣布这样的关系:

public function games()
{
    return $this->belongsTo('App\Game', 'id');
}

这告诉Laravel Post与列id的游戏相关,例如,记录:{id : 1, game_id : 3}将与Game相关联使用id 1,它应该与{3}的id {3}相关。Game方法的第二个参数是本地列。第三个参数是父列上的belongsTo。但默认情况下为id,因此您不应使用其中任何一个。

id

public function games() { return $this->belongsTo('App\Game'); }

中存在同样的问题

希望它有所帮助。