Maison > Questions et réponses > le corps du texte
J'ai ces deux tables de base de données :
Table utilisateur gérera ces informations
Schema::create('users', function (Blueprint $table) { $table->increments('id')->unique(); $table->string('email')->unique(); $table->string('username')->unique(); $table->string('password', 60); $table->string('photo')->nullable(); $table->integer('partner_id')->unsigned(); $table->foreign('partner_id')->references('id')->on('partners'); $table->rememberToken(); $table->timestamps(); });
Et la Table des partenaires contiendra toutes les méta-informations de l'utilisateur comme le prénom et le nom, etc.
Schema::create('partners', function (Blueprint $table) { /** * Identity Columns */ $table->increments('id')->unique(); $table->string('first_name'); $table->string('middle_name')->nullable(); $table->string('last_name')->nullable(); $table->string('display_name')->nullable(); $table->string('email')->unique()->nullable(); $table->string('website')->nullable(); $table->string('phone')->nullable(); $table->string('mobile')->nullable(); $table->string('fax')->nullable(); $table->date('birthdate')->nullable(); $table->longText('bio')->nullable(); $table->string('lang')->nullable(); //Language /** * Address Columns */ $table->text('street')->nullable(); $table->text('street2')->nullable(); $table->integer('country_id')->unsigned(); // foreign $table->foreign('country_id')->references('id')->on('countries'); $table->integer('state_id')->unsigned(); // foreign $table->foreign('state_id')->references('id')->on('country_states'); $table->string('city')->nullable(); $table->string('district')->nullable(); $table->string('area')->nullable(); $table->string('zip')->nullable(); });
Lorsqu'un utilisateur s'inscrit sur le site Web, je n'ai besoin que de quelques champs, qui sont 用户名
、电子邮件地址
、密码
、名字
和 姓氏
. Ce sont des champs obligatoires uniquement.
Par conséquent, les informations du tableau des partenaires peuvent être renseignées une fois que l'utilisateur a terminé son inscription sur le site Web.
Mais en raison de la structure des clés étrangères, je ne peux pas continuer à cause de cette erreur :
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mytable`.`tbl_partners`, CONSTRAINT `partners_country_id_foreign` FOREIGN KEY (`country_id`) REFERENCES `tbl_countries` (`id`)) (SQL: insert into `tbl_partners` (`first_name`, `last_name`, `display_name`, `email`, `updated_at`, `created_at`) values (Jack, Wilson, admin, admin@example.com, 2016-06-09 19:41:18, 2016-06-09 19:41:18))
Je sais que cela est dû à la table des pays requise par la table des partenaires.
Ma question est la suivante : existe-t-il une solution de contournement pour que je puisse remplir le tableau des partenaires avec le pays ou toute autre donnée non requise, tout en conservant le schéma de table externe pour le pays, l'état, etc.
P粉1357999492023-10-18 13:21:13
Pour que Laravel 7.x crée une clé étrangère nullable, utilisez simplement :
$table->foreignId('country_id')->nullable()->constrained(); $table->foreignId('state_id')->nullable()->constrained();
Rappelez-vous : la la nullitédoit avant être contrainte, sinon la nullabilité ne sera pas affectée.
P粉6383439952023-10-18 09:30:39
Définissez country_id
和 state_id
sur nullable comme indiqué ci-dessous.
$table->integer('country_id')->nullable()->unsigned(); $table->integer('state_id')->nullable()->unsigned();