У меня есть следующие отношения и атрибут в моей модели 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
inuShiva 19 Сен 2018 в 18:18

2 ответа

Лучший ответ

Вы можете использовать отношение 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();
0
Jonas Staudenmeir 19 Сен 2018 в 15:38

Вы можете добавить запрос в свой 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 и отфильтровывать их.

0
Teun 19 Сен 2018 в 15:30