Laravel:一对一关系变成一对多关系
Laravel: one to one relationship becomes one to many relationship
当我创建一对一关系迁移时,laravel 创建一对多关系。
PHP 7.1 & MySQL 5.7
模型是:角色和用户。
角色:
public function user()
{
return $this->hasOne('App\User', 'persona_id', 'id');
}
用户:
public function persona()
{
return $this->belongsTo('App\Persona', 'persona_id', 'id');
}
迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->integer('persona_id')->unsigned();
$table->foreign('persona_id')->references('id')->on('personas')->onDelete('cascade');
$table->unique(['persona_id', 'id']);
$table->string('email')->nullable()->unique();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
Schema::create('personas', function (Blueprint $table) {
$table->increments('id');
$table->string('tipo');
$table->integer('cedula')->unsigned()->unique();
$table->string('primer_nombre');
$table->string('segundo_nombre')->nullable();
$table->string('primer_apellido');
$table->string('segundo_apellido')->nullable();
/* Agregar demas campos que se requieran */
$table->timestamps();
});
如何使在数据库中创建的关系是一对一的而不是一对多的?
目前,这允许我为每个人节省一个以上的用户。
谢谢。
仅在 persona_id
:
上放置唯一索引
$table->unique('persona_id');
我只想替换:
$table->integer('persona_id')->unsigned();
$table->unique(['persona_id', 'id']);
来自
$table->integer('persona_id')->unique();
当我创建一对一关系迁移时,laravel 创建一对多关系。
PHP 7.1 & MySQL 5.7
模型是:角色和用户。
角色:
public function user()
{
return $this->hasOne('App\User', 'persona_id', 'id');
}
用户:
public function persona()
{
return $this->belongsTo('App\Persona', 'persona_id', 'id');
}
迁移:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->integer('persona_id')->unsigned();
$table->foreign('persona_id')->references('id')->on('personas')->onDelete('cascade');
$table->unique(['persona_id', 'id']);
$table->string('email')->nullable()->unique();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
});
Schema::create('personas', function (Blueprint $table) {
$table->increments('id');
$table->string('tipo');
$table->integer('cedula')->unsigned()->unique();
$table->string('primer_nombre');
$table->string('segundo_nombre')->nullable();
$table->string('primer_apellido');
$table->string('segundo_apellido')->nullable();
/* Agregar demas campos que se requieran */
$table->timestamps();
});
如何使在数据库中创建的关系是一对一的而不是一对多的? 目前,这允许我为每个人节省一个以上的用户。
谢谢。
仅在 persona_id
:
$table->unique('persona_id');
我只想替换:
$table->integer('persona_id')->unsigned();
$table->unique(['persona_id', 'id']);
来自
$table->integer('persona_id')->unique();