我尝试使以下刀片语句正常工作。如果角色在团队中,请显示其姓名:
// ranking.blade.php
@if ($character->user->hasTeam()) [{{ $character->user->team->name }}] @endif
问题
我的解决方案总是返回true,因为查询将被执行:
// User.php
public function hasTeam()
{
return ($this->whereNotNull('team_id')->first()) ? true : false ;
}
SQL
// dd($this->whereNotNull('team_id')->toSql());
-> "select * from `users` where `team_id` is not null"
答案 0 :(得分:2)
您只需检查用户的team_id
字段是否为空。这样,不需要额外的查询。
public function hasTeam()
{
return isset($this->team_id);
}
答案 1 :(得分:2)
作为@Jerodev答案的替代方案,您还可以使用访问者:
public function getHasTeamAttribute()
{
return isset($this->team_id);
}
因此,无论何时需要访问该属性,您都可以致电
$user->has_team
答案 2 :(得分:0)
$this->whereNotNull('team_id')->first()
返回什么?
请记住,您的三元运算符会听取真值。
我的猜测是你总是如此,因为查询总是被执行。只有连接到数据库时出错才会出错。