laravel - вызов функции-члена map () для массива - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь создать массив в моем списке контактов, основываясь на моей таблице сообщений fromContact отношение:

    $messages = Message::where('offer_id', $id)->get();
    $contacts = array();
    foreach($messages as $message){
      $contacts[] = $message->fromContact;
    }

далее Я пытаюсь создать карту для контакта, используя $ unreadIds, которые являются результатом другого запроса к таблице сообщений:

    $contacts = $contacts->map(function($contact) use ($unreadIds) {
        $contactUnread = $unreadIds->where('sender_id', $contact->id)->first();
        $contact->unread = $contactUnread ? $contactUnread->messages_count : 0;
        return $contact;
    });

и это не работает ... У меня просто сообщение с ошибкой: Call to a member function map() on array

и я понимаю, я не должен использовать map () для массива - поэтому я пробовал много способов преобразовать его в объект - все не удалось.

например преобразование контактов в объект после цикла массива

 $contacts = (object)$contacts;

выдает ошибку: "message": "Call to undefined method stdClass::map()",

Может, кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 29 июня 2018

Используйте laravel helper collect для массива, затем используйте map.

$collection = collect($contacts);

$collection->map(function($contact) use ($unreadIds) {
    $contactUnread = $unreadIds->where('sender_id', $contact->id)->first();
    $contact->unread = $contactUnread ? $contactUnread->messages_count : 0;
    return $contact;
});

https://laravel.com/docs/5.6/collections

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