3
votes

Laravel Add Column Boolean Nullable

Je suis actuellement en train de créer une application Laravel 5.7 dans laquelle j'ai plusieurs colonnes booléennes qui indiquent si certaines installations sont disponibles pour un bâtiment (modèle), par exemple, toilettes oui / non. Cela fonctionne bien, mais je me demandais ce qui se passait lorsque j'ajouterais plus de ces colonnes booléennes plus tard lorsque je déploierai l'application.

Disons que j'ajoute une colonne booléenne 'lights', je pourrais lui donner une valeur par défaut de 0, mais pas NULL. Alors maintenant, tous mes bâtiments existants diront qu'il n'y a pas de «lumières» (parce que la valeur est 0), alors qu'en réalité cela devrait être quelque chose comme «ne sais pas» ou «indéfini» comme un troisième état.

Dois-je utiliser les colonnes ENUM avec yes / no / undefined à la place? Quelles sont les meilleures pratiques pour ce scénario?


2 commentaires

Pourquoi pas simplement 0 = indéfini, 1 = non, 2 = oui


dans votre cas ici, vous avez multichoice (plusieurs statuts) pour une colonne, vous devriez donc utiliser enum pour y parvenir car ce sera plus facile pour vous de les gérer plus tard


4 Réponses :


1
votes

Vous pouvez certainement les créer comme nullable () ! C'est une pratique courante, OMI.

En ce qui concerne les meilleures pratiques, cela dépend de la manière dont votre application doit être utilisée. Voulez-vous qu'un utilisateur remarque que l'état n'a pas encore été sélectionné d'une manière ou d'une autre? Peut-être que vous affichez une invite pour configurer ceux qui sont nuls. D'un autre côté, il peut être plus sûr de supposer que les options doivent par défaut être false pour être rendues correctement. Si tel est le cas, peut-être qu'une notification pourra être envoyée à vos utilisateurs pour mettre à jour cette propriété.


0 commentaires

2
votes

Ce que je ferais, c'est créer une table séparée, avec object_id et Facility_id. Maintenant, vous pouvez avoir une table des installations dynamiques et les connecter avec un objet. La connexion n'aura que ce dont elle a besoin, donc pas tous les objets «légers» ou autre chose.


0 commentaires

0
votes

Oui, vous avez raison cela peut parfois être un problème

Mais le booléen PEUT ÊTRE UTILISÉ COMME TRUE (OU) FALSE ie) 0 (OR) 1

où en réalité cela devrait être quelque chose comme "ne sais pas" ou "non défini" comme un troisième état.

Donc, dans cette situation, utilisez Peut utiliser Enum

Par exemple Votre table aura ups_availablity

Scénario un:

Si vous souhaitez ajouter NotAvailable par défaut, passez simplement la valeur dans la méthode par défaut

$table->enum('ups_availablity', ['Available', 'NotAvailable'])->nullable();

Scénario deux:

Si vous souhaitez ajouter Null ajoutez la méthode nullable

$table->enum('ups_availablity', ['Available', 'NotAvailable'])->default('NotAvailable');

Si vous avez des éclaircissements Veuillez commenter ci-dessous

J'espère que cela vous aidera


0 commentaires

0
votes

Cela a fonctionné pour moi

$table->boolean('lights')->nullable();


0 commentaires