我试图在Laravel 5中生成一个唯一/随机字符串,并通过我的表检查它是否存在。
这就是我所拥有的,但它似乎给出了标题中所述的错误:
public static function generate()
{
$exists = true;
while ($exists) {
$code = str_random(15);
$check = self::where('code', $code)->first();
if( ! $check->count()){
$exists = false;
}
}
return $code;
}
任何人都知道它为什么会出现此错误?
答案 0 :(得分:3)
您看到的错误告诉您,您正在尝试对非对象的值调用方法。最有可能在您的代码中,您返回null,因为查询中的位置没有返回任何结果。您始终可以使用dd()
dd(Self::where('code', $code)->first())
因此,在调用count()
或您期望某个对象的值上的任何其他方法之前,您应该检查它是否为空。
对此,您可以在您提供的代码中更新if语句:
public static function generate()
{
$exists = true;
while ($exists)
{
$code = str_random(15);
// It's good practice to capitalise objects: Self instead of self
$check = Self::where('code', $code)->first();
if(!$check )
{
$exists = false;
}
}
return $code;
}
如Halayem Anis所述,您还可以使用is_object()
函数测试您检查的值是否为对象,但我认为您可能需要使用&&
运算符而不是||
:
if(!$check && !is_object($check))
答案 1 :(得分:2)
在处理之前,请务必检查您的返回值...
public static function generate()
{
$exists = true;
while ($exists) {
$code = str_random(15);
$check = self::where('code', $code)->first();
if( is_null ($check) ||
! is_object($check) ||
! $check->count())
{
$exists = false;
}
}
return $code;
}