Trong Laravel 5.1 Tôi có thể thấy rằng các mối quan hệ cột bảng có thể được thiết lập trong 2 cách sau:Migration Ngoại chính Vs hùng biện mối quan hệ trong Laravel
1) Xác định Keys nước ngoài trong bảng Migration.
2) Xác định mối quan hệ Eloquent trong Mô hình.
Tôi đã đọc các tài liệu và tôi vẫn còn nhầm lẫn về sau:
Tôi có cần phải sử dụng cả hai hay chỉ 1 là cần thiết?
Sử dụng cả hai cùng một lúc có sai không? Hay nó làm cho nó trở thành dư thừa hoặc gây xung đột?
Lợi ích của việc sử dụng mối quan hệ Eloquent mà không đề cập đến Khóa ngoại trong cột di chuyển là gì?
Sự khác biệt là gì?
Đây là những mã tôi hiện có. Nó vẫn không rõ ràng với tôi nếu tôi cần phải loại bỏ các phím nước ngoài tôi đã thiết lập trong tập tin di chuyển của tôi.
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');
});
}
mẫu với hùng biện mối quan hệ:
// 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');
}
}
Ai đó có thể giúp tôi hiểu được điều này xin vui lòng?
hoàn hảo. Đó là những gì tôi đã nhầm lẫn và cảm ơn bạn đã xác nhận điều đó đối với tôi. Hãy xem nhanh mã Migration and Model của tôi ở trên, tôi đã thực hiện việc liên kết các mối quan hệ và ràng buộc khóa ngoài chính xác chưa? Đây là nỗ lực đầu tiên của tôi và tự hỏi liệu tôi có đang đi đúng hướng với nó hay không. Một lần nữa xin cảm ơn @ArslanAli – Neel
@Neel Để xem xét mã của bạn, bạn có thể đăng mã của mình tại http://codereview.stackexchange.com/ và có thể nhận được đánh giá phong nha (tôi hy vọng) về nó. Cảm ơn. –
xin lỗi, tôi không chắc chắn nếu tôi hiểu câu này đúng: 'nhưng không cung cấp khóa nước ngoài trong bảng mô hình người thuộc về bảng khác, quan hệ của bạn sẽ không hoạt động.' – Neel