Почему неопределенное свойство, когда коллекция foreach? - PullRequest
0 голосов
/ 05 мая 2019
$conversations = Conversations::with('bulletin', 'messages')->leftJoin('own', 'conversations.bulletin_id', '=',
    'own.id')
    ->select('conversations.*')
    ->where('owner_id', $userId)
    ->orWhere('owner', $userId)
    ->orderBy('updated_at', 'desc')
    ->get();
dd($conversations);

$conversation = Conversations::getInfo($conversations->first());

foreach ($conversations as $conversation) {
    dd($conversation->bulletin);
}

https://i.imgur.com/qne8Xhh.png - скриншот с первым dd ()

https://i.imgur.com/OCjFfD0.png - скриншот dd () в foreach () - здесь ничего нет

Если я попытаюсь получить доступ к $conversation->bulletin->id, это будет ошибка 'неопределенное свойство ...'

public static function getInfo($conversation)
{
    $conversation->messages = self::find($conversation->id)->messages();
    $conversation->bulletin = self::find($conversation->id)->bulletin();
    $conversation->users = self::find($conversation->id)->users();

    return $conversation;
}

1 Ответ

1 голос
/ 05 мая 2019

Это происходит потому, что для некоторых $conversations или может быть один из $conversation не имеет никаких bulletin. В результате, когда вы перебираете все $conversations и получаете доступ к $conversion->bulletin->id, этот conversation вызывает ошибку. Когда вы запускаете dd, он выбрасывает только первый conversation и умирает. В результате вы не видите правильно, в чем проблема.

заменить следующую строку:

dd($conversation->bulletin);

с этой строкой и смотрите:

dump($conversation->id, $conversation->bulletin);

Я совершенно уверен, что вы увидите, что хотя бы в одном разговоре нет бюллетеня.

Обновление:

самостоятельно :: найти ($ conversation-> идентификатор) -> пользователей (); вернет объект отношения, а не коллекцию пользователей. Если вы хотите получить доступ к коллекции пользователя, тогда вы должны сделать self::find($conversation->id)->users. То же самое для bulletin и messages

На самом деле, я не думаю, что вам нужен этот getInfo() метод. Вам просто нужно правильно использовать метод запроса with,

Итак, замените:

Conversations::with('bulletin','messages')

эта часть Conversations::with('bulletin','messages', пользователей )

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