我的模型Donation
中具有以下关系和属性-
public function donationUpdates(){
return $this->hasMany(donationUpdate::class,'donationID');
}
public function getdonationUploadStatusAttribute(){
$donationUploadStatus = $this->donationUpdates()->where([
['actionCategoryID', 1],
['actionID', 2]
])->orderBy('created_at','desc')->first();
return $donationUploadStatus ;
}
此刻,我正在尝试扩展和更正由我的前任创建的项目,他们有以下查询,稍后将在函数中将其返回给json以在ajax脚本中使用:
$donationsOpen = Donation::with('donationUpdates')
->where('donorID', $customer->id)
->whereNotIn('hold_status', [2,3])
->orderBy('created_at', 'desc')
->get();
现在,这可以正常工作,但是问题在于每次捐赠都有大量donationUpdates
,它本身会返回collection
。
我很好奇我是否可以通过每种方式访问getdonationUploadStatusAttribute
,或者是否可以像我通常会通过的那样遍历donationUpdates
并筛选出第一个模特的礼物。
非常感谢您的帮助。
答案 0 :(得分:0)
您可以像这样向您的with
添加查询:
$donationsOpen = Donation::with(['donationUpdates', function($query){
$query->where([
['actionCategoryID', 1],
['actionID', 2]
]);
}])
->where('donorID', $customer->id)
->whereNotIn('hold_status', [2,3])
->orderBy('created_at', 'desc')
->get();
with
中的函数将仅查询donationUpdates并将其过滤掉。
答案 1 :(得分:0)
您可以使用HasOne
关系:
public function donationUploadStatus(){
return $this->hasOne(donationUpdate::class,'donationID')
->where([
['actionCategoryID', 1],
['actionID', 2]
])->orderBy('created_at','desc');
}
$donationsOpen = Donation::with('donationUploadStatus')
->where('donorID', $customer->id)
->whereNotIn('hold_status', [2,3])
->orderBy('created_at', 'desc')
->get();