В Laravel 5.1 можно видеть, что отношения столбцов таблицы могут быть настройки 2-мя способами:миграции иностранных Ключевые Vs Красноречивые Отношения в Laravel
1) Определение внешних ключей в таблице миграции.
2) Определение отношений между людьми в моделях.
Я прочитал документацию, и я до сих пор путают на следующее:
мне нужно использовать оба или только один нужен ли?
Неправильно ли использовать оба устройства одновременно? Или это делает избыточным или вызывает конфликты?
В чем преимущество использования взаимопонимания без упоминания Внешние ключи в столбце миграции?
В чем разница?
Это коды, которые у меня есть сейчас. Его все еще неясно, если мне нужно удалить внешние ключи, которые я установил в своем файле миграции.
миграция:
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');
}
}
Может кто-то помочь мне понять это, пожалуйста?
идеально. Вот что я смутил и благодарю вас за подтверждение этого для меня. Если вы посмотрите на мои коды миграции и модели выше, выполнил ли я взаимосвязь отношений и ограничений внешнего ключа правильно? Это моя первая попытка и просто интересно, правильно ли я нахожусь на этом пути. Еще раз спасибо @ArslanAli – Neel
@Neel. Для обзора вашего кода вы можете опубликовать свой код по адресу http://codereview.stackexchange.com/ и можете получить достойный (я надеюсь) обзор об этом. Благодарю. –
извините, я не уверен, что я правильно понимаю это предложение: 'но не предоставил внешний ключ в таблице модель, которая принадлежит другой таблице, ваши отношения не будут работать.' – Neel