2013-10-25 69 views
7

我試圖尋找一個表,以查看是否存在名爲「名稱」的列,如果是這樣返回值,如果不創建與空值的行,我看到firstOrCreate但我無法弄清楚如何把它用於我的生活。雄辯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

create()方法會進行批量分配,這是一個很大的安全問題,所以Laravel有一個防範措施。它在內部已經保護= ['*'],所以你的所有列將被保護以防大量分配。你有一些選擇:

設置模型的可填寫的欄目:你要保持謹慎

class User extends Eloquent { 

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

} 

或者只設定的:

class User extends Eloquent { 

    protected $guarded = array('password'); 

} 

你可以,在你自己的風險也做:

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');和數據庫中不存在考試示例,而不是創建它,我得到名爲 –

+0

的MassAssignmentException也爲什麼我的Facade調用比使用self ::更好? –

+0

您實際上是批量分配的,所以如果您需要將所有列分配給您的模型,則需要將'protected $ guarded = [];'添加到您的模型中。 –