In Laravel 5.1 kann ich, dass die Tabellenspalte Beziehungen sehen kann auf 2 Arten eingerichtet werden:Migration Fremdschlüssel Vs Eloquent Beziehungen in Laravel
1) Definition von Fremdschlüsseln in der Migrationstabelle.
2) Definieren der beredten Beziehungen in den Modellen.
Ich habe die Dokumentationen gelesen und ich bin immer noch auf der folgenden verwirrt:
Muss ich beide verwenden müssen oder nur 1 benötigt?
Ist es falsch beide gleichzeitig zu verwenden? Oder macht es überflüssig oder verursacht Konflikte?
Welchen Vorteil bietet die Verwendung von Eloquent-Beziehungen, ohne die Fremdschlüssel in der Migrationsspalte zu erwähnen?
Was ist der Unterschied?
Dies sind die Codes, die ich jetzt habe. Es ist mir immer noch unklar, ob ich die Fremdschlüssel entfernen muss, die ich in meiner Migrationsdatei eingerichtet habe.
Migration:
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');
});
}
Modell mit Eloquent Beziehungen:
// 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');
}
}
Kann mir jemand helfen, dies zu verstehen, bitte?
perfekt. Darüber war ich verwirrt und danke Ihnen, dass Sie das für mich bestätigt haben. Sehen Sie sich kurz meine oben genannten Migrations- und Modellcodes an, habe ich die Verknüpfung von Beziehungen und Fremdschlüsseleinschränkungen korrekt durchgeführt? Dies ist mein erster Versuch und ich frage mich nur, ob ich damit auf dem richtigen Weg bin. Nochmals vielen Dank @ArslanAli – Neel
@Neel Für die Überprüfung Ihres Codes können Sie Ihren Code bei http://codereview.stackexchange.com/, und kann eine anständige (ich hoffe) Bewertung darüber. Vielen Dank. –
Sorry, ich bin mir nicht sicher, ob ich diesen Satz richtig verstehe: 'aber habe keinen Fremdschlüssel in der Tabelle das Modell angegeben, der zu anderen Tabellen gehört, Ihre Beziehungen werden nicht funktionieren. – Neel