我一直在試圖用where
子句編寫一個大規模的update
查詢,我發現Laravel 5.3 Eloquent Query Builder會產生語法錯誤。在Laravel 5中使用單引號引起的語法錯誤Eloquent Query Builder
查詢如下:
$query = $this->model
->where('state', "pending")
->whereRaw('created_at <= NOW() - INTERVAL 12 HOUR')
->update(['state' => "timeout"]);
這是翻譯成這樣:
update `orders`
set `state` = timeout, `updated_at` = 2016-09-21 21:47:39
where `state` = pending and created_at <= NOW() - INTERVAL 12 HOUR
該查詢持續失敗,因爲該列state
和updated_at
值不單引號寫入。
我該如何強制Laravel寫出正確的單引號?
我知道我可以使用DB :: raw,但我想找到更多...優雅的解決方案,可以說。我使用雙引號,因爲查詢生成器也將它們刪除,如果我使用單引號...也許這與主要問題有關? (順便說一下'國家'是一個枚舉) – Mumpo
枚舉不應該有所作爲,因爲字符串無論如何發送到MySQL。我認爲DB :: raw會是一個更優雅的解決方案。如果你像這樣開始黑客攻擊,那麼我建議只寫一個原始查詢。 –
我寧願使用查詢生成器工具。我已經編輯了這個問題,在'state'列中加入了單引號的問題,我想他們可能會有關聯 – Mumpo