Laravel - 使用模型关系中的列

Laravel - Use a column from a model relation

在我的 livewire 视图中,我通过客户和信用之间的模型关系从它们各自的所有者那里获得了所有信用

型号:客户

protected $fillable = ['name'];

public function credits(){
    return $this->hasMany(Credit::class);
}
public function payments(){
    return $this->hasManyThrough(Payment::class, Credit::class);
}

型号:信用

const ACTIVE= 1;
const LIQUIDATED= 2;

protected $fillable = ['amount', 'amount_end', 'status', 'dues'];

public function client(){
    return $this->belongsTo(Client::class);
}
public function provider(){
    return $this->belongsTo(Provider::class);
}
public function payments(){
    return $this->hasMany(Payment::class);
}

在我的 livewire 视图中,我有一个 foreach 可以获取所有客户端,在一个计算客户端信用的开关中

Livewire:显示客户端

@foreach ($clients as $item)
     ...
  @switch($item->credits->count())
                                        @case($status_credit = 1)
                                            <span class="px-2 py-1 inline-flex text-sm leading-5 font-semibold rounded-md bg-yellow-300 text-yellow-600 geosanslgbold text-md">
                                                Credit
                                            </span>
                                            @break
                                        @case($status_credits >= 2)
                                            <span class="px-2 py-1 inline-flex text-sm leading-5 font-semibold rounded-md bg-orange-300 text-orange-700 geosanslgbold text-md">
                                                Credits
                                            </span>
                                            @break
                                        @default
                                            <span class="px-2 py-1 inline-flex text-sm leading-5 font-semibold rounded-md bg-green-400 text-green-900 geosanslgbold text-md">
                                                Not Credits
                                            </span>
   @endswitch
 @endforeach

到目前为止一切正常,它告诉我学分并告诉我是否有。

现在信用点可以选择将它们置于活动状态或清算状态

我将如何进行切换,而不是告诉我所有客户的积分,只取活跃的或在这种情况下编号为 1 的积分并添加活跃的积分

抱歉我的英语不好

我相信您正在寻找所谓的“本地查询范围”:https://laravel.com/docs/9.x/eloquent#local-scopes

    public function scopeIsLiquidated(Builder $query): Builder
    {
        return $query->where('status', LIQUIDATED);
    }

用法:

$clients = ...->isLiquidated()->...;