php Laravel数据库模式,可为空外部

k2fxgqgv  于 2023-01-19  发布在  PHP
关注(0)|答案(7)|浏览(97)

我有这两个数据库表:
1.用户表
1.合作伙伴表

    • 用户表**将处理此类信息
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();
});

Partner Tables将包含所有用户元信息,如名字和姓氏等。

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();
});

当一个用户注册到该网站我只想要几个字段,其中,usernameemail addresspasswordfirst namelast name。这些都只是必填字段。
因此,合作伙伴表中的信息可以在用户完成站点注册后填写。
但由于外键的结构,我无法继续,因为这个错误:

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))

我知道这是由合作伙伴表所要求的国家/地区表造成的。
我的问题是:是否有一个变通办法,使我可以填写国家或任何其他非必需的数据上的合作伙伴表,但保留外国表模式的国家,州等。

wb1gzix0

wb1gzix01#

对于laravel 7.x,创建一个可以为空的外键只需使用:

$table->foreignId('country_id')->nullable()->constrained();

$table->foreignId('state_id')->nullable()->constrained();

记住:nullable 应该在constrained 之前,否则nullable将不受影响。

4dc9hkyq

4dc9hkyq2#

country_idstate_id设置为可空,如下所示。

$table->integer('country_id')->nullable()->unsigned();

$table->integer('state_id')->nullable()->unsigned();
smdnsysy

smdnsysy3#

使用最新版本的Laravel,您可以将nullable方法与foreignKey结合使用:

$table
      ->foreignId('other_table_id')
      ->nullable() // here
      ->references('id')
      ->on('other_table');
cvxl0en2

cvxl0en24#

对于Laravel 7.x,我使用以下方式:

$table->bigInteger('word_type_id')->nullable()->unsigned();
$table->index('word_type_id')->nullable();
$table->foreign('word_type_id')->nullable()->references('id')->on('word_types')->onDelete('cascade');
ih99xse1

ih99xse15#

拉腊维尔8

$table->foreignId('foreign_key_id')->nullable()->constrained()->onDelete('cascade');
hfsqlsce

hfsqlsce6#

注意如果你有引用('{column}')-〉on('{table}'),你需要把nullable()-〉constrained()放在这之前,即:

$table->foreignId('author')->nullable()->constrained()->references('id')->on('users');

这是在拉腊维尔9号公路上,但可能更早。

gzszwxb4

gzszwxb47#

最好的办法是

$table->unsignedBigInteger('country_id')->nullable();
$table->foreign('country_id')->references('id')->on('stock_indices')->onDelete('cascade');

相关问题