在Laravel中获得所查询关系的关系?

时间:2019-01-20 17:13:07

标签: php laravel

我正试图让主要比赛的战队成员,只有一个赛季实例。

我使用关于tournaments关系的查询来获取主要比赛,然后在刚刚获取的比赛模型上调用clans关系。

除了..它不再是模型了,我很确定它是一个查询?还是收藏,对不起我的理解,但简单地解释一下,我无法再访问关系了?

在查询比赛后仍然可以致电clans的情况下,我需要帮助。

这是我的模特。

class Season extends Model
{
    public function clans() {
        return $this->belongsToMany(Clan::class);
    }

    public function tournaments() {
        return $this->hasMany('App\Tournament', 'season_id');
    }

    public function primaryTournament() {
        return $this->tournaments->where('is_primary', '1');
    }
}

class Tournament extends Model
{
    public function clans() {
        return $this->belongsToMany(Clan::class);
    }

    public function season() {
        return $this->belongsTo('App\Season', 'season_id');
    }
}

我正在努力实现这一目标:

$season = Season::all()->last();
$tournament = $season->primaryTournament();
$teams = $tournament->clans; // this is what erorrs

什么阻止了我?

Property [clans] does not exist on this collection instance.

2 个答案:

答案 0 :(得分:0)

尝试

$teams = $tournament->clans(); // with parenthesis

问题显然出在$ tournament上,它是锦标赛类的集合,而不是唯一类的实例(因为它是通过-> where('is_primary','1')获得的), 您可以通过-> first()方法选择第一个实例 或遍历$ tournament值并访问氏族属性。

答案 1 :(得分:0)

尝试这个$teams = $tournament->clans(); 氏族是模型上的关系函数,您需要加上括号。这应该返回Clan类的集合。