FatalErrorException:调用非对象上的成员函数count()

时间:2015-06-14 13:01:18

标签: php database random laravel-5 unique

我试图在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;
    }

任何人都知道它为什么会出现此错误?

2 个答案:

答案 0 :(得分:3)

您看到的错误告诉您,您正在尝试对非对象的值调用方法。最有可能在您的代码中,您返回null,因为查询中的位置没有返回任何结果。您始终可以使用dd()

查看您在Laravel查询中返回的内容

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;
        }