【问题标题】:Set fetched record default value for using in Blade设置在 Blade 中使用的获取记录默认值
【发布时间】:2017-10-01 11:36:54
【问题描述】:

我尝试使用此方法从数据库中获取所有用户字段:

$user = Users::all();

我的数据库中有一些字段是nullable 我想知道在刀片中使用时有没有办法为空字段设置默认值?

例如我有这个字段:

first_name, last_name, bio, city, fb_account, twitter_account , ...

所有这些字段都是可选的(数据库中可以为空)我想为具有空值的字段显示N/A,但我不想为每个字段使用@if

有可能吗?

更新:

我想在任何地方使用{{ $user->first_name }},如果这是null,则返回N/A and ifnot null`返回自己

【问题讨论】:

    标签: laravel model blade laravel-5.4


    【解决方案1】:

    你可以在 Laravel 5.4 中做到这一点

    {{ $first_name or 'N/A' }}
    

    完全一样
    echo isset($first_name) ? $first_name : 'N/A'; 
    

    根据您的更新,您可以查看Accessor & Mutators

    然后你可以这样:

    public function getFirstNameAttribute($value)
    {
        if(! empty($value)) 
        {
          return $value;
        }
    
        return null;
    }
    

    【讨论】:

    • 谢谢,有没有办法设置默认值?因为我想在任何地方使用{{ $user->first_name }},如果这是null,则返回N/A,如果不是null,则返回自己
    【解决方案2】:

    在将用户对象发送到视图之前,使用each 方法循环遍历用户对象

    $user = Users::all()->each(function ($item, $key) {
        if ($item->first_name === null) {
            $item->first_name = 'N/A';
        }
    });
    

    【讨论】:

    • 谢谢,each()不适用于find(),如果我使用find()而不是all()该怎么办
    • find() 将返回模型实例而不是集合,您可以尝试在实例上执行 foreach 循环或尝试使用主键数组调用 find 方法,这将返回一个匹配记录的集合,如find([1])
    【解决方案3】:

    如果你想这样做,你可以使用自定义属性

    public function getFirstNameAttribute()
    {
        return $this->first_name ?: 'N/A';
    }
    

    然后

    {{ $item->first_name }}
    

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多