首页  >  问答  >  正文

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粉773659687233 天前372

全部回复(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
  • 取消回复