如果字段为非NULL,则Laravel返回FALSE(eloquent,whereNotNull)

时间:2017-04-15 11:19:05

标签: laravel laravel-5 eloquent

我尝试使以下刀片语句正常工作。如果角色在团队中,请显示其姓名:

// 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"

问题

  • 在这个实例中,whereNotNull方法是否无效?
  • 如果用户是团队成员,我如何只显示团队名称?

3 个答案:

答案 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()返回什么?

请记住,您的三元运算符会听取真值。

我的猜测是你总是如此,因为查询总是被执行。只有连接到数据库时出错才会出错。