Laravel,do..while循环无限循环?

7

现在,我有一个循环函数来工作,直到在我的数据库中没有匹配项,这样我就能得到一个唯一的字符串。然而,由于某些原因,我的循环是无限的。我在这里做错了什么吗?

do {
   $testvar = Str::random(5);
   $data = User::where('password_url', 'LIKE', '%'.$testvar.'%')->get();
}
   while (!empty($data));

问题在于我没有收到任何错误消息,但也没有得到任何结果。再次强调,如果我的数组 $data 是空的,我希望这个循环被终止,但如果它存在,我希望它一直进行直到它为空。

3个回答

9

尝试使用$data->count()检查结果集中是否返回了任何内容:

do {
    $testvar = Str::random(5);
    $data = User::where('password_url', 'LIKE', '%'.$testvar.'%')->get();
}
while ($data->count());

嘿,感谢您的快速回复。我会尝试这个方法并告诉您结果。但是有一个快速问题,为什么这里不能使用empty()函数? - Udhayan Nair
不是百分之百确定,但可能与您的PHP代码中即使结果集为空也不真正“为空”有关。 - Tim Biegeleisen
嗯,公平。需要进一步调查以确定原因。另外,$data->count() 很完美!干杯!:D - Udhayan Nair
2
如果没有返回结果,User::where('...')->get()将返回一个空的Laravel集合,因此在这些条件下empty($data)将返回false,从而导致无限循环。 - Ben Sholdice

2
你也可以使用以下代码来实现:

最初的回答

do {
   $testvar = Str::random(5);
   $data = User::where('password_url', 'LIKE', '%'.$testvar.'%')->get();
}while (count($data)!=0);

我建议这样做的原因是,有时候$data->count()会返回错误的计数!(这种情况已经发生过,那时我使用了count()函数,它正常工作了!)

哦,我明白了!谢谢你的建议,我现在正在尝试不同的情况 :) - Udhayan Nair

2
"最初的回答"
你尝试过这个吗,
do{
    $testvar = Str::random(5);
     $data = User::where('password_url', 'LIKE', '%'.$testvar.'%')->get();
  }while (!empty($data->count()));

1
啊,我现在明白了。默认情况下使用!empty($data),它只会返回一个条件值,而不是一个确切的值供参考。 - Udhayan Nair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接