Laravel Eloquent Model,根据另一列的值返回列的空白数据

时间:2017-12-20 13:42:11

标签: laravel laravel-5.5

我有以下用户模型

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'first_name', 'last_name', 'company', 'mobile', 'mobile_share', 'dob', 'email', 'password', 'active'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function teams()
    {
        return $this->belongsToMany('App\Team', 'team_user', 'team_id', 'user_id');
    }
}

使用有说服力的查询时,如果行中的mobile等于mobile_share,是否可以自动返回空的0数据?

3 个答案:

答案 0 :(得分:2)

是的,accessor完成了这项工作。

public function getMobileAttribute()
{
    if ($this->mobile_share !== 0 && isset($this->attributes['mobile'])) {
        return $this->attributes['mobile'];
    }
}

然后用它轻松调用。

$user->mobile;

答案 1 :(得分:1)

嗯,所有答案都应该有效,但你可以内联它! :

public function getMobileAttribute($mobile)
{
    return $this->mobile_share ? $mobile : null;
}

有关详细说明:

在getter函数中传递$ mobile允许获取当前mobile属性,所以基本上,如果$ this-&gt; mobile_share!= 0并且不为null则返回移动设备,否则返回null < / p>

答案 2 :(得分:-2)

我有一个可以满足您需求的解决方案 在您的模型中,定义一个getter:

public getMobileAttribute($value)
{
    if (!$this->mobile_share) {
        return null;
    }
    return $value;
}