J'essaie d'effectuer une recherche dans une base de données via un champ enum pur :
enum Enum1 { case Case1; } Model::query()->where('enum1', Enum1::Case1)->first()
et ça ne marche pas, provoquant l'erreur Error Object of class Enum1 Could not be conversion to string.
Lorsque je recherche par énumérations prises en charge, cela fonctionne :
enum Enum2: int { case Case1 = 1; } Model::query()->where('enum2', Enum2::Case1)->first()
Offre de la valeur à Model->casts
中,为 Enum1
和 Enum2
.
Je sais, je peux chercher par Enum1::Case1->name
mais ce n'est pas ce que je recherche. Si possible, j'aimerais mettre en place les bons acteurs.
Quelle est la manière la plus simple/correcte de gérer ce problème ?
Je pense que votre problème est que MySQL n'a pas de support natif pour les champs Enum.
Eloquent dans la clause Where s'attend également à ce que le deuxième paramètre soit une chaîne ou un autre type de données "commun".
Peut-être qu'à un moment donné, Laravel eloquent prendra en charge les Enums, mais je ne pense pas que ce soit le cas actuellement.
Je ne vois rien de mal à utiliser :
Cet article ici explique en fait comment accéder à DB avec Enums, alors veuillez le lire.
Après tout, le but de l'énumération est de rendre le code plus facile à lire. Utilisez le principe de « séparation des préoccupations » pour rendre le code plus lisible. Nous avons utilisé des constantes et d'autres astuces avant qu'elles n'arrivent en PHP8