2016-02-03 15 views
1

我與項目工作laravel updateOrCreate(),其中表創建的所有依賴於用戶增加新的屬性,所以我的模型,我有以下動態表

class Hotel extends Model 
{ 
    public function __construct($hotel) 
    { 
     $this->table = $hotel; 
    } 

    protected $fillable = ['date', 'sold', 'sold_diff', 'rev', 'rev_diff', 'row', 'date_col', 'sold_col', 'rev_col']; 

} 

,我可以使用該表的時間在做

$hotel_table = new Hotel($table); 

控制器,但我喜歡用型號:: updateOrCreate()當我添加或更新錶行,我不知道該怎麼做。

回答

0

這是updateOrCreate功能 「靜態模型updateOrCreate(數組$簽名屬性,數組$ values = array())「

爲了更新或創建,您可以傳遞必須滿足的條件來更新表的第一個參數和值更新到第二個。例如

$primaryKey = isset($request->input('id')) ? $request->input('id') : null; 

    $myModel = Model::updateOrCreate(['id' => $primaryKey], $request->all()); 

與此所以如果ID是在請求對象的表將被更新,但如果沒有一個新的記錄將被創建。

+0

我可能沒有正確地問問題,但基本上我想知道的是我怎麼可以鏈方法updateOrCreate()或所有()或get(),因爲我叫$ hotel_table = new Hotel($ table);我必須這樣做,因爲酒店模型需要構造函數。 –

+1

你可以做$ hotel_table =(new Hotel($ table)) - > all();或$ hotel_table =(new Hotel($ table)) - > updateOrCreate(['id'=> $ primaryKey],$ request-> all());如果我找到你的權利。 – oseintow

+0

你走了,這就是我需要知道的,謝謝! –

1

在Laravel 5.2,你可以使用簡單的這樣

class Hotel extends Model 
    { 
     protect $table = 'hotels' 

     protected $fillable = ['date', 'sold', 'sold_diff', 'rev', 'rev_diff', 'row', 'date_col', 'sold_col', 'rev_col']; 
// protected $guarded = []; you can use this instead of `$fillable` this is for all columns fillable 

    } 

現在在你的控制器,你可以使用

Model::update(); 
Model::create(); 
+0

等等,表是如何設置的?我有構造函數的全部原因是因爲有許多表爲不同的酒店,他們一直在增加,所以當我需要添加數據特定的酒店時,我需要將該表設置爲酒店模型。 –

+0

如果你有相同的屬性爲每個酒店創建兩個表,並使用外鍵即時消息不清楚你的要求 – Hamelraj