2015-06-17 86 views
0

Laravel 5存在一個奇怪的問題,它拒絕存儲複選框值。Laravel 5不存儲複選框值

我們正在修改與Laravel 5捆綁在一起的現有註冊表單,並且我們正在添加一個optin複選框,但似乎該模型無法將其識別爲字段,即使我們將它作爲字段添加到遷移文件中。

任何幫助,將不勝感激。

Mirgration文件:

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('first_name'); 
     $table->string('last_name'); 
     $table->string('email')->unique(); 
     $table->string('password', 60); 
     $table->date('dob'); 
     $table->boolean('optin')->nullable(); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 
} 

然後我們把它添加到register.blade.php文件:

<div class="form-group"> 
         <label class="col-md-4 control-label">Optin</label> 
         <div class="col-md-6"> 
          <input type="checkbox" class="form-control" name="optin"> 
         </div> 
        </div> 

在創建用戶模型的角度來看,我們選中該複選框的值並分配它。

protected function create(array $data) 
{ 

    //this does return 1 or 0 as expected 
    $optin = ($data["optin"] == "on") ? 1 : 0; 

    return User::create([ 
     'first_name' => $data['first_name'], 
     'last_name' => $data['last_name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'dob' => $data['dob'], 
     'optin' => $optin 
    ]); 
} 

但是此時該字段爲空。沒有值輸入數據庫...

+0

所以'$ optin'甚至沒有保存爲0? – Loko

+0

否該字段爲空。即使在PHP修補程序中嘗試過,它仍拒絕將$ user-> optin = 1添加到用戶對象,但會讓我指定其他名稱!試圖改變名稱,但仍然不會將值添加到數據庫! –

回答

2

你已經把場「選擇啓用」模型中的$可填寫的數組中?否則,你不能創建一個使用靜態創建方法'optin'的用戶。

//File: User.php 
protected $fillable = ['optin']; 
+0

http://stackoverflow.com/questions/30888099/laravel-5-not-storing-checkbox-value/30888824?noredirect=1#comment49819068_30888824 –

0

該模型已經有一個static create()函數。因此,當您從控制器撥打電話User::create($data)時,不會調用您的功能。

我的方法是更改​​函數的名稱並使其成爲static

更新

您也可以覆蓋創建功能:

public static function create(array $attributes) 
{ 
    $attributes["optin"] = ($attributes["optin"] == "on") ? 1 : 0; 

    return parent::create($attributes); 
} 
+0

但這是與Laravel 5捆綁在一起的AuthController.php ...? –

+0

您稱之爲上述功能的地方在哪裏?我想這個函數是由一個像「User :: create($ data)'這樣的控制器調用的。 –

+0

它運行在laravel供應商目錄中存在的Illuminate \ Foundation \ Auth \ AuthenticatesAndRegistersUsers特徵,因此它通過那裏被調用... –