将条件放在第一个数组中有很多 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
我在使用 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