首页 > 解决方案 > 如何修复 - Illuminate\Database\Eloquent\Collection {#440 ▼ #items: [] }

问题描述

我想在 users 表中选择具有推荐用户名和角色 4 的用户并将它们存储在 $refUser 中,但出现此错误。“照亮\数据库\雄辩\集合 {#440 ▼ #items: [] }”

  $new_ref_user = $user->referal;
            $itr_cnt = 0;    

            while ($itr_cnt <= $ref_cnt-1)
            {
                $refUser = User::where('username', $new_ref_user)->where('role', 4)->get();
                dd($refUser);
                if(count($refUser) > 0)
                {
                    $ref = new ref;
                    $ref->user_id = $user->id;
                    $ref->username = $new_ref_user;

请问,做错了什么?谢谢你的帮助

标签: phplaraveldatabasereferrals

解决方案


dd意思是“倾倒和死亡”。您没有收到错误,而是看到了dd($refUser)调用的结果。Illuminate\Database\Eloquent\Collection {#440 ▼ #items: [] }是一个空集合。

您可以使用一个查询一次获取所有用户,然后循环遍历这些用户,而不是在循环中查询数据库。我不知道$ref_cnt-1你的代码在哪里以及为什么你有一个循环,但你可以做这样的事情。另外,检查拼写。它应该是referral还是 var 拼写错误?是ref模型类的名称吗?我建议UserReferral改用这个名字。

如果$user->referral是一个数组:

User::whereIn('username', $user->referral)
    ->where('role', 4)
    ->get()
    ->each( function ($ref) use ($user) {
       $model = new UserReferral;
       $model->user_id = $user->id;
       $model->username = $ref->username;
       $model->save();
   }); 

如果$user->referral只是一个字符串 ( username):

$ref = User::where('username', $user->referral)->first();
if ($ref) {
    $model = new UserReferral;
    $model->user_id = $user->id;
    $model->username = $ref->username;
    $model->save();
}

请注意,$query->get()返回 aCollection$query->first()返回第一个匹配行(如果使用 Eloquent,则在模型实例中)。


推荐阅读