第一个数组中的put条件有多个laravel

第一个数组中的put条件有多个laravel,laravel,eloquent,lumen,Laravel,Eloquent,Lumen,我用我的雄辩的查询生成器筛选数据时遇到了一些问题。我有事务模型和状态模型。哪个事务具有多个状态。我想得到hasMany relation的第一个数组,并把它放在哪里。这是我的密码 $var = Transaction::with([ 'status' => function ($q) { return $q->first(); } ])->whereHas('status',function (

我用我的雄辩的查询生成器筛选数据时遇到了一些问题。我有事务模型和状态模型。哪个事务具有多个状态。我想得到hasMany relation的第一个数组,并把它放在哪里。这是我的密码

$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 relation构建一个新的关系,然后加载它:

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();

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

您可以为该关系创建另一个函数或更改exist函数

public function firstStatus() {
   return $this->hasMany('App\Models\Status','transaction_id','id')->orderBy('status','desc')->limit(1);
}
因为我终于能弄明白了

首先,我必须设置如下所述的模型:

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();

谢谢

->whereHas('status')表示返回的模型或函数有多个?是的,此whereHas将确保您具有该状态,在这里,您可以使用任一关系