2017-07-27 40 views
3

我想在我的數據庫更新JSON列,但我得到這個錯誤:Laravel雄辯不更新JSON柱:數組字符串轉換

Array to string conversion 

我已經宣佈了列名作爲array型號:

protected $casts = [ 
    'destinations' => 'array' 
]; 

這是我使用的代碼:

$data[] = [ 
    'from' => $fromArray, 
    'to' => $toArray 
]; 

Flight::where('id', $id)->update(['destinations' => $data]); 

我該怎麼辦?

+1

試試這個:'$ =飛行飛行::發現($ ID); $ flight-> destinations = $ data; $ flight-> save();'see [here](https://github.com/laravel/framework/pull/15464) – Maraboc

+0

@Maraboc發佈您的答案請 – Ramin

回答

0

根據在Github此對話:Make json attributes fillable if Model field is fillable泰勒Otwell recommande使用save方法:

$模型 - >選項= [ '富'=> '酒吧'];

$ model-> save();

所以你如果你能做到這一點是這樣的:

$flight = Flight::find($id); 
$flight->destinations = $data; 
$flight->save(); 
1

您可以用箭頭,你可以像這樣更新欄訪問您的JSON鍵:

Flight::where('id', $id)->update([ 
    'destinations->from' => $data['from'], 
    'destinations->to' => $data['to'] 
]); 

正如@fubar提到的,你必須有mysql 5.7纔能有我的解決辦法工作。

檢查docs

+0

這不是所有數據庫都支持的。例如,MySQL 5.7+。 – fubar

+1

@farar謝謝我更新了我的回答 –

2

因爲你想更新使用查詢生成器,它基本上僅僅是創建原始的SQL查詢您的型號你收到這個錯誤。它不知道在你的模型中定義的任何數據轉換等。因此,您有三個選擇:

1)找到您的模型,並在您的模型實例上運行更新。

$flight = Flight::findOrFail($id); 
$flight->update(['destinations' => $data]); 

2)更新前將數據轉換爲字符串。

$data = json_encode($data); 
Flight::where('id', $id)->update(['destinations' => $data]); 

3)按照@ AmrAly的建議,使用支持JSON列查詢的數據庫。請注意這個選項,因爲並非所有的數據庫都支持JSON列。

+0

我知道這可以使用'json_encode'來完成,但我想使用雄辯的投射特徵。感謝你的回答 – Ramin