迁移外键与拉拉维尔中的雄辩关系
在Laravel 5.1中,我可以看到可以通过两种方式设置表列关系:
1) 在迁移表中定义外键。
2)定义模型中的雄辩关系。
我已经阅读了文档,但我仍然对以下内容感到困惑:
我需要同时使用两者还是只需要 1 个?
同时使用两者是错误的吗?还是使它变得多余或引起冲突?
使用雄辩关系而不提及迁移中的外键列有什么好处?
有什么区别?
这些是我现在拥有的代码。我仍然不清楚我是否需要删除我在迁移文件中设置的外键。
迁移:
public function up()
{
Schema::create('apps', function (Blueprint $table) {
$table->increments('id');
$table->string('app_name');
$table->string('app_alias');
$table->timestamps();
$table->engine = 'InnoDB';
});
// This is the second Migration table
Schema::create('app_roles', function (Blueprint $table) {
$table->increments('id');
$table->integer('app_id')->unsigned()->index();
$table->integer('user_id')->unsigned()->index();
$table->integer('role_id')->unsigned()->index();
$table->engine = 'InnoDB';
$table->unique(array('app_id', 'user_id'));
$table->foreign('app_id')
->references('id')
->on('apps')
->onDelete('cascade');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
$table->foreign('role_id')
->references('id')
->on('roles')
->onDelete('cascade');
});
}
具有雄辩关系的模型:
// App Model
class App extends Model
{
public function appRoles() {
return $this->hasMany('App\Models\AppRole');
}
}
// AppRole Model
class AppRole extends Model
{
public function app() {
return $this->belongsTo('App\Models\App');
}
public function user() {
return $this->belongsTo('App\User');
}
public function role() {
return $this->belongsTo('App\Models\Role');
}
}
// User Model
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
.....
public function appRole() {
return $this->belongsToMany('App\Models\AppRole');
}
}
// Role Model
class Role extends EntrustRole
{
public function appRole() {
return $this->hasMany('App\Models\AppRole');
}
}
有人可以帮我理解这一点吗?