2016-07-14 20 views
1

我使用以下代碼更新了記錄的兩個領域:Laravel更新方法不按預期工作

$companyPlan = CompanyPlan::whereCompanyId($companyId)->first(); 
$companyPlan->update(['plan_id' => $planId, 'next_plan_id' => $planId]) 

它所做的是,它更新plan_id領域,但不next_plan_id

plan_idnext_plan_id都位於模型的$ fillable數組中。

這真的是一個奇怪的行爲,但我無法知道爲什麼會是這樣的原因。

protected $fillable = ['plan_id', 'next_plan_id']; 
protected $hidden = []; 
+0

由於您正在使用的只有一種模式:你嘗試明確設置的參數,然後保存();? – Kjell

+0

不應該在哪裏':: where('company_id',$ companyId)' – Jonathan

+0

@Kjell你的意思是更新()方法不適用於一個模型?如果這就是你說的話,那麼爲什麼它只更新plan_id而不是next_plna_id,無論我改變它們的位置或順序。 – MKJ

回答

1

嘗試這樣的事情,而不是:

CompanyPlan::where('company_id', $companyId)->first() 
    ->update(['plan_id' => $planId, 'next_plan_id' => $planId]); 
+0

謝謝@Jonathan,但這不起作用。 請注意:plan_id已更新,但next_plan_id未更新。 – MKJ

+0

當你在dd($ planId);更新之前獲得期望值嗎? – Jonathan

+0

是的,'plan_id'字段按預期更新,但'next_plan_id'不會按預期更新。 – MKJ

0

你有沒有嘗試這個,像謝爾在評論中說:

​​
+0

是的,這工作,但你不覺得相比,update()方法是漫長的。 – MKJ

0

此行爲是因爲你的表可是沒有任何主密鑰,因此無法正確更新它(,因爲它使用主鍵來更新單個模型實例)。

你應該通過其獨特的屬性,選擇該行,並更新其在相同的查詢,如:

CompanyPlan::where('company_id', $companyId) 
    ->update(['plan_id' => $planId, 'next_plan_id' => $planId]); 

通過消除第一()方法,你在做你的工作只有一個查詢:

"UPDATE company_plans WHERE company_id = $companyId". * 
相關問題