2013-10-25 1 views
7

Я пытаюсь найти таблицу, чтобы увидеть, существует ли столбец с именем «имя», если это возвращает значение, и если не создать эту строку с нулевым значением, я увидел firstOrCreate, но я не могу понять, как использовать его для жизни меня.Документация или использование Eloquent firstOrCreate

Это то, что я имею в настоящее время, может кто-нибудь протянуть руку?

class Settings extends Eloquent 
     { 
      protected $table = 'settings'; 
      protected $primaryKey = 'name'; 

      public static function get($settingName) 
       { 
        return self::firstOrCreate(array('name' => $settingName)); 
//     return self::select(array('value'))->where('name', '=', $settingName)->first()->value; 
       } 
     } 
+0

Что вы получаете в результате вызова 'Настройки :: получить ($ settingName) '? Любые сообщения об ошибках? Или что-то, чего вы не ожидаете? –

+0

Я получаю имя MassAssignmentException, потому что имя, которое я пытаюсь получить, не существует –

ответ

10

Метод создания() делает массовое назначение, и это большая проблема безопасности, так Laravel имеет защиту от него. Внутренне он охраняется = ['*'], поэтому все ваши столбцы будут защищены от массового присвоения. У вас есть несколько вариантов:

Установите заполняемых столбцов модели:

class User extends Eloquent { 

    protected $fillable = array('first_name', 'last_name', 'email'); 

} 

Или установить только те, которые вы хотите сохранить охранял:

class User extends Eloquent { 

    protected $guarded = array('password'); 

} 

Вы можете на свой страх и риск также do:

class User extends Eloquent { 

    protected $guarded = array(); 

} 

И все будет неохраняемо.

Берут смотреть документацию: http://laravel.com/docs/eloquent#mass-assignment

Вы также можете использовать ваш фасад назвать:

class Settings extends Eloquent 
{ 
     protected $table = 'settings'; 
     protected $primaryKey = 'name'; 

     public static function get($settingName) 
     { 
      return Settings::firstOrCreate(array('name' => $settingName)); 
     } 
} 
+0

Проблема, с которой я сталкиваюсь, - это при вызове Settings :: get ('example'); и пример экзамена не существует в базе данных, а не для его создания. Я получаю сообщение MassAssignmentException от имени –

+0

. И почему бы мне вызвать мой фасад лучше, чем использовать self ::? –

+0

Фактически вы назначаете массовое присвоение, поэтому вам нужно добавить 'protected $ guarded = [];' к вашей модели, если вам нужно назначить все ваши столбцы. –

Смежные вопросы