搜尋

首頁  >  問答  >  主體

Laravel 透過純粹(無支援)枚舉進行搜索

我正在嘗試透過純枚舉欄位在資料庫中執行搜尋:

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 中,為 Enum1Enum2 提供值。

我知道,我可以透過 Enum1::Case1->name 進行搜索,但這不是我要找的。如果可能的話,我想安排合適的演員。 處理這個問題最簡單/正確的方法是什麼?

P粉773659687P粉773659687300 天前436

全部回覆(1)我來回復

  • P粉946437474

    P粉9464374742024-02-04 12:19:52

    我認為你的問題是 MySQL 沒有對 Enum 欄位的本機支援。

    where 子句中的 Eloquent 也希望第二個參數為字串或其他「常見」資料類型。

    也許在某個時候 Laravel eloquent 會支援 Enums,但我認為目前情況並非如此。

    我認為使用以下內容沒有什麼問題:

    enum Enum2: int {
        case Case1 = 1;
    }

    這篇文章這裡實際上討論瞭如何存取DB with Enums,所以請閱讀。

    列舉的目的畢竟是讓程式碼更容易閱讀,使用「關注點分離」原則,讓程式碼更具可讀性。在 PHP8 中出現之前我們就使用了常數和其他技巧

    回覆
    0
  • 取消回覆