将条件放在第一个数组中有很多 laravel

put condition in first array on has many laravel

我在使用 eloquent 查询构建器过滤数据时遇到了一些问题。我有交易模型和状态模型。哪个交易有很多状态。我想获得 hasMany 关系的第一个数组并将其放在哪里。这是我的代码。

$var = Transaction::with([
          'status' => function ($q) {
              return $q->first();
           }
       ])->whereHas('status',function ($x){
           return $x->where('status',0);
       })->get();

状态模型为

public function status(){
      return $this->hasMany('App\Models\Status','transaction_id','id')->orderBy('status','desc');
}

结果还是没有给我正确的数据。它应该通过返回第一个数组状态值为 0

的数据

您可以使用 hasOne 关系建立一个新关系,然后加载它:

public function firstStatus(){
      return $this->hasOne('App\Models\Status','transaction_id','id')->orderBy('status','desc')->where('status',0);  // or mybe just ' ->latest() to get the most recent one.
}

然后,您可以像这样使用此关系:

$var = Transaction::with(['firstStatus'])->whereHas('status',function ($x){
           return $x->where('status',0);
       })->get();

这个加载的关系将是第一个。

您可以为此创建另一个函数或更改现有函数

public function firstStatus() {
   return $this->hasMany('App\Models\Status','transaction_id','id')->orderBy('status','desc')->limit(1);
}

因为OMR我终于弄明白了

首先,我必须像 OMR 那样设置模型,就像 :

public function firstStatus(){
  return $this->hasOne('App\Models\Status','transaction_id','id')->orderBy('status','desc');  // or mybe just ' ->latest() to get the most recent one.

}

并将控制器放置为:

$var = Transaction::with(['firstStatus' => function($q){
        return $q->where('status',0);
   }])->whereHas('status',function ($x){
       return $x->where('status',0);
   })->get();

感谢OMR