Коллекция с атрибутами или указанная с помощью () - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть следующие отношения и атрибут в моей модели 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 и отфильтроватьк первому, как я обычно делал через модель attibute.

Буду признателен за помощь.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать 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 голосов
/ 19 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...