我正在尝试根据我的消息表fromContact关系在我的联系人列表中创建一个数组:
$messages = Message::where('offer_id', $id)->get();
$contacts = array();
foreach($messages as $message){
$contacts[] = $message->fromContact;
}
Run Code Online (Sandbox Code Playgroud)
接下来,我正在尝试使用 $unreadIds 制作联系人地图,这些 $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;
});
Run Code Online (Sandbox Code Playgroud)
这不起作用......我收到了简单的错误消息:
Call to a member function map() on array
我明白,我不应该在数组上使用 map() - 所以我尝试了很多方法将它转换为对象 - 都失败了。
例如在数组循环后将联系人转换为对象
$contacts = (object)$contacts;
Run Code Online (Sandbox Code Playgroud)
给出错误: "message": "Call to undefined method stdClass::map()",
也许有人知道如何解决这个问题?
在数组上使用 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;
});
Run Code Online (Sandbox Code Playgroud)
https://laravel.com/docs/5.6/collections
| 归档时间: |
|
| 查看次数: |
11578 次 |
| 最近记录: |