【发布时间】:2019-07-27 15:31:28
【问题描述】:
我需要找出给定球队的当前球员。我为此创建了一个范围。要求是它检查数据透视表以查看 left_at 字段是否为空。如果为 Null,则表示他们仍在团队中(当前玩家)。该关系是多态的多对多关系。它之所以是多态的,是因为一支球队也可以有球员来来去去,也可以有球队的教练。
团队.php
/**
* Scope a query to only include current players.
*
* @param \Illuminate\Database\Eloquent\Builder $query
*/
public function scopeCurrentPlayers($query)
{
return $query->whereHasMorph('players', Player::class, function ($query) {
$query->whereNull('left_at');
});
}
**
* Get all players that have been members of the stable.
*
* @return \Illuminate\Database\Eloquent\Relations\MorphByMany
*/
public function players()
{
return $this->morphedByMany(Player::class, 'member')->using(Member::class)->withPivot(['joined_at', 'left_at']);
}
控制器
$currentTeamPlayers = $team->currentPlayers()->get()->pluck('id');
我希望获得团队中当前球员的集合,但我收到以下错误。
+异常:Symfony\Component\Debug\Exception\FatalThrowableError^ {#5387 -originalClassName:“类型错误” #message: "传递给 Illuminate\Database\Eloquent\Builder::getBelongsToRelation() 的参数 1 必须是 Illuminate\Database\Eloquent\Relations\MorphTo 的实例,给定的 Illuminate\Database\Eloquent\Relations\MorphToMany 的实例,调用/Users/jeffreydavidson/Projects/Ringside/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php 在第 215 行"`
【问题讨论】:
-
您找到解决方案了吗?我也遇到了这个。
-
嗨,即使我遇到了同样的问题。你有解决办法吗?
-
你已经有了变形关系,所以你的范围可能看起来像:
public function scopeCurrentPlayers($query) { return $query->whereHas('players', function ($query) { $query->whereNull('left_at'); }); }
标签: laravel