Laravel 5.4 eloquent hasMany и последующий PHP для проверки статуса утверждения - PullRequest
0 голосов
/ 18 мая 2018

У меня есть две модели, Email и EmailReview.Электронная почта имеет много адресов электронной почты.Этот запрос:

$data = Email::with('emailReviews')->where('created_by', '=', $personId)->get();

возвращает коллекцию конкретного человека emails, который имеет review_group_type либо approval или feedback, а отношение email_reviews имеет утвержденное свойство:либо true, false или null.Я ищу самый простой способ проверить, является ли электронное письмо подтверждением, и для всех отзывов в коллекции для утвержденного столбца установлено значение true, чтобы установить статус подтверждения для каждого сообщения, т. Е. $email->approvalStatus.У некоторых писем также не будет отзывов, поэтому мне нужно проверить это.Что-то в этом роде, но это явно уродливо, и мне трудно получить конечный результат:

if ($data->review_group_type === 'approval') {
        foreach($data as $email) {
            if (!is_null($email->email_reviews)) 
            foreach($email->email_reviews as $review) {

            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Опираясь на ответ @ Salama96 и пройдя немного дальше, вы можете сделать это:

$data = Email::with('emailReviews')
        ->where(['created_by'=>$personId,'review_group_type'=>'approval'])
        ->has('emailReviews')
        ->get()
        ->map(function ($email){
           // Here, you check if all the emailReviews are 'true'
           $reviewsStatus = $email->emailReviews->pluck('approved')->unique();
           if ($reviewsStatus->count() == 1 AND $reviewsStatus->first())
           {
               $email->approvalStatus = true;
           }

           return $email;
        });
    }

PS: Не проверялось это должным образом, но оно должно работать.

0 голосов
/ 18 мая 2018

Я думаю, вы можете упростить свой запрос, чтобы он был таким:

$data = Email::with('emailReviews')
 ->where(['created_by'=>$personId,'review_group_type'=>'approval'])
 ->has('emailReviews')->get();

Здесь вы получите все письма, созданные конкретным человеком с условием одобрения и имеющие emailReviews

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