【问题标题】:Conditional (ternary) operator in Laravel bladeLaravel 刀片中的条件(三元)运算符
【发布时间】:2022-01-05 16:17:12
【问题描述】:

我正在尝试将刀片中的条件(三元)运算符添加到 Laravel,例如:

<select name="staff" id="staff" class="form-control placeholder>
  <option value="0">{{ __('messages.Select Staff') }}</option>
  @if($staff != "Empty Staff")
   @foreach ($staff as $item)
    <option value="{{ $item->id}}" {{$item->stafftime->states == 'open' ? 'disabled' : ''}}>{{$item->name}}</option>
   @endforeach
   @else
   <option value='0'> __('messages.Empty Staff')</option>
@endif
</select>

在我的模范员工和员工时间喜欢打击:

    protected $table = "stafftimes";

    protected $fillable = [
        'id', 'starttime', 'endtime', 'states', 'staff_id', 'created_at', 'updated_at'
    ];

    protected $hidden = [];  // Hide The Variable from select

    public function staff()
    {
        return $this->belongsTo('App\Models\Staff', 'staff_id', 'id');
    }

在我的员工模型中,例如:

    protected $table = "staffs";

    protected $fillable = [
        'id', 'name', 'mobile'
    ];

    protected $hidden = [];  // Hide The Variable from select


    public $timestamps = false;

    public function stafftime()
    {
        return $this->hasMany('App\Models\Stafftime', 'staff_id', 'id');
    }

我有一个错误

此集合实例上不存在属性 [states]

【问题讨论】:

  • stafftime 关系是“有很多”关系,因此它返回一个集合而不是单个模型实例......它返回一个可能包含许多 StaffTime 模型的集合......你会必须从该集合中获取单个模型才能访问该模型的属性
  • 那么解决办法是什么!!
  • “您必须从该集合中获取单个模型才能访问该模型的属性” ...您要访问该集合中的多个潜在模型中的哪个states 属性?
  • 集合中可能有许多 StaffTime 模型实例...您想访问其中的哪一个?如果集合中有 10 个,您想访问哪个特定的 ONE?
  • 再一次,集合可以有很多很多记录,您要对这些记录中的哪一个进行'states'属性检查,看看它是否设置为'open'?

标签: php laravel laravel-blade


【解决方案1】:

当您访问 Staff 模型上的动态属性 stafftime 时,您访问的 Collection 可能包含许多模型实例。如果您想知道这些StaffTime 实例中的任何 是否将“states”属性设置为“open”,您可以使用 Collection 类的contains 方法:

$item->stafftime->toBase()->contains('states', 'open')

这将为您提供一个布尔值,用于您的三元条件。

之所以在那里调用toBase(),是因为Eloquent Collection(realtionship使用)覆盖了contains方法以具有不同的功能,因此我们希望将Eloquent Collection转换为常规Collection以便能够使用正常的contains 功能。

Laravel 8.x Docs - Collections - Available Methods - contains

【讨论】:

  • $item->staffTime->toBase()->contains('states', 'open') 工作完成谢谢
  • 没问题,如果它对你有用,请随时标记为已接受 .. 祝你好运,享受 Laravel 的乐趣
猜你喜欢
  • 1970-01-01
  • 2020-12-25
  • 2014-12-05
  • 2017-10-24
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-19
相关资源
最近更新 更多