2014-03-04 67 views
0

當我嘗試使用文件上傳功能保存數據時,出現以下錯誤,因爲我已經向我的表聲明瞭一個新的uploader_id,應該從我在模型。Laravel Relationships(user-upload)

Illuminate \ Database \ QueryException 
SQLSTATE[HY000]: General error: 1364 Field 'uploader_id' doesn't have a default value (SQL: insert into `assets` (`filename`, `title`, `body`, `filepath`, `extension`, `realpath`, `mime`, `updated_at`, `created_at`) values (users.mov, New, dummy text data. , /uploads/User Test/2014-03-04_00:48, mov, /private/var/tmp/phpHDpmEI, video/quicktime, 2014-03-04 00:48:59, 2014-03-04 00:48:59)) 

在我的模型定義了以下

用戶模型:其中資產在數據庫中上載表的表名

public function assets() { 
    return hasMany('assets'); 
} 

上傳型號:

public function user() { 
    return belongsTo('user', 'uploader_id'); 
} 

我曾在我的控制器中嘗試使用Upload :: create(array())函數將數據發佈到d atabase,添加另一個名爲'uploader_id'=> Auth :: user() - > id的參數;但沒有一項工作。

每次用戶上傳文件時,將uploader_id傳遞給表單的最佳方式是什麼?

回答

1

這就是事件是:

class Asset extends Eloquent { 

    public static function boot() 
    { 
     static::creating(function($model) 
     { 
      $model->uploader_id = Auth::user()->id; 
     }); 
    } 
} 
+0

謝謝!所以引導函數何時被觸發?這是如何工作的? – cch

+1

@cchacholiades - 引導方法被稱爲[第一次訪問課程](https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Eloquent/Model.php#L237)。這給你一個設置事件的機會,這是我在這裏完成的。 –

0

而且你的關係應參考他們的階級 -

return $this->hasMany('Asset');