我有3个表:用户,组,消息;
用户表是php artisan make:auth生成的默认表,“组”表包含:
id,book_id
邮件表包含:
id,group_id,来自msg_content
用户表和组表之间存在多对多关系,数据透视表包含:
user_id,group_id,last_id_seen
现在,我想获取属于用户的所有组以及每个组中的最后一条消息,格式不为null: goup_id => last_msg
所以我尝试了:
$Groups=Auth::user()->groups()->where()->get();
$get=$Groups->mapWithKeys(function($Groups){
$lsi=$Groups->pivot->last_id_seen;
$istrue=$Groups->messages()->where('id','>',$lsi)->get()->isNotEmpty();
if($istrue==true){
return [$Groups->id => $Groups->messages()->get()->last()];
}
});
但是出现以下错误:
“为foreach()提供了无效的参数”
我确定如果错误则在哪里发生错误提示,则应继续执行其他指令,但是我找不到我尝试过的正确指令:返回,返回true,返回“”,但无济于事
我是laravel的新手,你能帮我吗?
答案 0 :(得分:0)
我认为您不想通过在匿名函数中声明$Groups
来覆盖它,我在下面将其重命名为$Group
。
此外,您必须在该匿名函数中返回某些内容。我们可以使用filter()
来解决这个问题。
$Groups = Auth::user()->groups()->where()->get();
$get = $Groups->filter(function ($Group) {
$lsi = $Group->pivot->last_id_seen;
return $Group->messages()->where('id', '>', $lsi)->get()->isNotEmpty()
})->mapWithKeys(function ($Group) {
return [$Group->id => $Group->messages()->get()->last()];
});
当您使用的函数中没有return
时,其返回值将为null
,这对foreach
而言无效。期望返回array
。