J'ai une table organizations
. Cette table a un id
principal (int 10, unsigned, AUTO_INCREMENT).La contrainte de clé étrangère échoue sur le champ NULLable
Dans la table organizations
, j'ai également une clé étrangère à l'iself: main_organization_id
. Cela a les attributs suivants: (int 10, unsigned, nullable, vide: TRUE, par défaut: NULL).
Chaque fois que je crée une nouvelle organisation:
$organization = Organization::create($request->all());
Sans main_organization_id
dans ma demande, il échoue avec l'erreur suivante:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
myDB
.organizations
, CONSTRAINTorganizations_main_organization_id_foreign
FOREIGN KEY (main_organization_id
) REFERENCESorganizations
(id
)) (SQL: insert intoorganizations
(main_organization_id
) values ())
Mais pourquoi cette échec? Le champ est nullable, cela signifie-t-il que je dois implicitement définir main_organization_id
à null
dans la demande?
Mon $fillable
:
protected $fillable = [
'main_organization_id',
];
Ma migration:
Schema::table('organizations', function (Blueprint $table) {
$table->integer('main_organization_id')->unsigned()->nullable();
$table->foreign('main_organization_id')->references('id')->on('organizations');
});**strong text**
Je veux éviter le code comme ceci: $request['main_organization_id'] = null;
avant de créer ma nouvelle ligne. Est-ce possible?
Merci d'avoir lu.
Pouvez-vous vérifier ce qui est dans votre requête ($ request-> all()) à partir de l'erreur SQL, il semble qu'il soit vide ou seul champ est passé - main_organization_id – michaeltintiuc
Si vous envoyez le champ main_organization_id à travers un formulaire peut créer une méthode "setter" sur votre modèle pour vérifier les valeurs vides et les convertir en null – michaeltintiuc