-1
votes

Laravel 5.8 Bit (1) DataType Problème

J'ai une colonne activée avec le bit de type DataType (1). J'essaie d'économiser 0 ou 1 valeur dans la base de données par Laravel Eloquant.

'enabled' => [
    '0' => 'No',
    '1' => 'Yes',
],


3 commentaires

Il semble que vous économisez des données '' non '' non ',' oui 'qui est une chaîne non 0 ou 1


en faisant var_dump ($ entrées ["activé"]); Cela me montre 0 ou 1. Cela produit une erreur sur sauvegarde ();


Est-ce que cela répond à votre question? Laravel 4.2 bits DataType Problème


5 Réponses :


2
votes

Vous avez besoin de type Tinyint, dans votre fichier de migration xxx

lorsque vous migrez avec boolean ("Columin_name") Il crée une colonne avec TYPE TINYINT (1 ) Et vous pouvez définir pour modéliser True / 1 ou FAUX / 0 et sauvegarder. Par exemple xxx

ou xxx


3 commentaires

Veuillez ajouter une explication à votre réponse, de sorte que d'autres puissent en apprendre - pourquoi Tinyint est-il nécessaire?


Lorsque vous migrez avec Boolean («Nom de colonne»), il crée une colonne avec Type Tinyint (1) et vous pouvez définir pour modéliser True / 1 ou False / 0 et enregistrez. Par exemple $ Modèle-> boolean_field = true; $ Modèle-> sauvegarder (); il sera identique à $ modèle-> boolean_field = 1; $ modèle-> sauvegarder ();


Veuillez ajouter toutes ces informations à votre réponse en le modifiant. Ne mettez pas d'explications dans la section des commentaires



1
votes

Selon le manuel MySQL, vous pouvez utiliser doit utiliser bool et boolean qui sont des alias de tinyint pour stocker 0 ou 1 valeur

tinyint : une valeur de zéro est considéré comme faux. Sans zéro Les valeurs sont considérées comme vraies.

Ainsi, utilisez: xxx

https://dev.mysql.com/doc/refman/8.0/fr/her-vendor-Data-Types.html


0 commentaires

0
votes

Un booléen à MySQL est Généry un tinyint.

Les modèles éloquents peuvent lancer Boolean Automaticaly: https://laravel.com/docs/6.x/eloquent-mutators#attribute-casting P>

$model->enabled = $inputs['enabled']==='Yes';
$model->save();


7 commentaires

Et si j'essaie de sauver la valeur "non"?


$ entrées ["activé '] ===' oui 'renvoie false de sorte qu'il fonctionne


Fondamentalement, j'utilise une liste déroulante à partir de laquelle je sélectionne oui ou non pour enregistrer une valeur 1 ou 0 dans la base de données, respectivement. Je dois gérer les deux choses en même temps. Pouvez-vous s'il vous plaît me guider?


Donc, vos entrées $ ["activées"] doivent être égales à 0 ou 1? Dans ce cas, vous ne devez faire que $ Model-> activé = $ entrées ['activé'] et fonctionne comme prévu.


Merci pour votre réponse. Oui, ce faisant, il retourne 0 ou 1, mais ce n'est pas épargne en effectuant $ modèle-> sauvegarder (); et produisant des données d'erreur "String Data, droite tronquée: 1406 Données trop longues pour la colonne" activée ""


Il n'est pas possible si vous l'avez jeté à un booléen!


Non, je ne l'ai pas jeté à Boolean.



0
votes

Vous pouvez également utiliser des mutator pour forcer les valeurs.
Exemple: dans votre modèle, ajoute: xxx

et dans le code du client xxx

puis la méthode est appelée lors de la création et du "activé". deviendra 1

doc: https://laravel.com/docs/ 5.8 / Eloquent-mutateurs


0 commentaires

0
votes

Alors j'avais résolu ma question en ajoutant juste dB :: cru ();

comme, xxx

éloquent ne fonctionne pas en appelant la valeur booléenne directement, D'abord, vous devez passer par vos valeurs dans dB :: cru ();

Cela fonctionne comme un charme.


0 commentaires