我正在嘗試透過純枚舉欄位在資料庫中執行搜尋:
enum Enum1 { case Case1; } Model::query()->where('enum1', Enum1::Case1)->first()
並且它不起作用,導致錯誤 Error Object of class Enum1 Could not be conversion to string.
當我透過支援的枚舉進行搜尋時,它有效:
enum Enum2: int { case Case1 = 1; } Model::query()->where('enum2', Enum2::Case1)->first()
在 Model->casts
中,為 Enum1
和 Enum2
提供值。
我知道,我可以透過 Enum1::Case1->name
進行搜索,但這不是我要找的。如果可能的話,我想安排合適的演員。
處理這個問題最簡單/正確的方法是什麼?
我認為你的問題是 MySQL 沒有對 Enum 欄位的本機支援。
where 子句中的 Eloquent 也希望第二個參數為字串或其他「常見」資料類型。
也許在某個時候 Laravel eloquent 會支援 Enums,但我認為目前情況並非如此。
我認為使用以下內容沒有什麼問題:
這篇文章這裡實際上討論瞭如何存取DB with Enums,所以請閱讀。
列舉的目的畢竟是讓程式碼更容易閱讀,使用「關注點分離」原則,讓程式碼更具可讀性。在 PHP8 中出現之前我們就使用了常數和其他技巧