W laravel 5,1 widzę, że relacje kolumn tabeli może być set-up na 2 sposoby:migracji zagranicznych Najważniejsze Vs wymowny Relacje w laravel
1) Definiowanie kluczy obcych w tabeli migracji.
2) Definiowanie wymownych relacji w modelach.
Czytałem dokumentacje i jestem nadal mylone na:
Czy trzeba używać obu lub 1 jest potrzebne tylko?
Czy korzystanie z obu tych funkcji jest niewłaściwe w tym samym czasie? Czy może to nadmiarowe lub powodować konflikty?
Jaka jest korzyść z używania Wymownych relacji bez wspominania o kluczach obcych w kolumnie migracji?
Jaka jest różnica?
Oto kody, które mam teraz. Nadal niejasne dla mnie, jeśli muszę usunąć obcych kluczy, które ustawiłem w moim pliku migracji.
Migracja:
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');
});
}
Model z wymownym Relationships:
// 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');
}
}
Czy ktoś może mi pomóc zrozumieć to proszę?
doskonały. Właśnie o to mi chodziło i dziękuję za potwierdzenie tego dla mnie. Spoglądając na powyższe kody Migracji i Modelu, czy poprawnie dokonałem powiązania powiązań i ograniczeń klucza obcego? To jest moja pierwsza próba i zastanawiam się, czy jestem na dobrej drodze. Jeszcze raz dziękuję @ArslanAli – Neel
@Neel Aby przejrzeć swój kod, możesz opublikować swój kod na stronie http://codereview.stackexchange.com/ i uzyskać przyzwoitą (mam nadzieję) opinię na jego temat. Dzięki. –
Przepraszam, nie jestem pewien, czy rozumiem to zdanie w prawo: 'ale nie podałem klucza obcego w tabeli model, który należy do innej tabeli, twoje relacje nie zadziałają. – Neel