Recherche Laravel via une énumération pure (non prise en charge)
P粉773659687
P粉773659687 2024-02-03 20:19:05
0
1
432

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 中,为 Enum1Enum2.

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 ?

P粉773659687
P粉773659687

répondre à tous(1)
P粉946437474

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 :

enum Enum2: int {
    case Case1 = 1;
}

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal