具有属性的集合或指定为With()的集合

时间:2018-09-19 15:18:54

标签: laravel laravel-5 eloquent

我的模型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并筛选出第一个模特的礼物。

非常感谢您的帮助。

2 个答案:

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