试图在mapWithKeys回调中添加条件时,laravel 5.6“为foreach()提供了无效的参数”

时间:2018-08-23 18:35:35

标签: laravel eloquent

我有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的新手,你能帮我吗?

1 个答案:

答案 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