2015-06-14 1 views
0

Я пытаюсь создать уникальную/случайную строку в Laravel 5 и проверить ее через мою таблицу, чтобы узнать, существует ли она.FatalErrorException: вызов функции-члена count() для не-объекта

Это то, что у меня есть, но это, кажется, дает ошибку, указанную в названии:

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

Кто-нибудь знает, почему это дает эту ошибку?

+1

ошибка говорит, что это не возвращает объект для метода подсчета будет называться далее. Если вы запустите 'self :: where ('code', $ code) -> first()', вы увидите, что там ничего нет. Попробуйте 'if (! $ Check)' вместо вызова метода count на нем. – haakym

+0

Спасибо, это исправило ошибку. – Pex

+0

Отлично, я вызову ответ, если вы не возражаете :) – haakym

ответ

2

ошибки вы видите, говорят вам, что вы пытаетесь вызвать метод на значении, которое не является объектом. Скорее всего, в вашем коде вы возвращаете значение null, так как в вашем запросе ничего не возвращалось. Вы всегда можете видеть, что вы возвращение в запросах Laravel с помощью dd():

dd(Self::where('code', $code)->first())

Так перед вызовом count() или любой другой метод на значение, для которого вы ожидаете, что объект, который вы должны проверить это не нулевой ,

ли к этому вы можете обновить, если заявление в коде, при условии:

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)) 
+0

1k ближе ... :) Продолжайте движение –

+0

Ха-ха очень благодарен моему другу надеяться в ближайшее время присоединиться к клубу 1k :) - btw Я полностью неуверенный, если вам нужно использовать '&&' или '' ', было бы признательно, если вы – haakym

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; 
     } 
Смежные вопросы