qwe*_*rty 21 database migration relationship laravel
我知道你可以定义表之间的关系很容易用$this->belongs_to(),$this->has_many()等等,但我不明白的是如何创建的关系表; 将两个表绑定在一起的表(我忘了这个术语的名称).
假设我正在创建一个用户表.我希望该用户属于某个"角色".有多个角色,每个角色可以有多个用户.我还需要为此创建一个roles表.到现在为止还挺好.
但在阅读文档后,它说我应该$this->belongs_to()在模型中添加,而不是迁移本身.何时以及如何创建关系表?如果我创建roles并users表,并添加$this->belongs_to('roles')到users模型,并$this->has_many('users')在roles模型中,将中间表自动创建?
Roa*_*ark 52
创建迁移时,您可以在表上指定外键,即
public function up()
{
Schema::table('roles', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
//rest of fields then...
$table->foreign('user_id')->references('id')->on('users');
});
}
Run Code Online (Sandbox Code Playgroud)
这将在roles表的user_id列上创建一个外键.外键的好处是,当进行更新或删除时,外键表将自动更新或"级联",这里有很棒的描述
如Laravel文档中所述,您还可以使用以下语法指定更新时的级联
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
Run Code Online (Sandbox Code Playgroud)
我会尝试解释它比文档更好,所以请阅读Eloquent ORM文档的"关系"部分,看看它是如何完成的.
Mer*_*ent 15
看起来好像从未回答过一些初始问题,即"何时,以及如何创建关系表"和"将自动创建中间表":
据我所知,这些表需要手动创建.因此,像这样创建迁移文件:
Laravel 5
php artisan make:migration create_role_user_table
Run Code Online (Sandbox Code Playgroud)
Laravel 4
php artisan migrate:make create_role_user_table
Run Code Online (Sandbox Code Playgroud)
请注意,名称是单数,并按字母顺序显示.
然后在迁移中,例如:
public function up()
{
Schema::create('role_user', function($table) {
$table->increments('id');
$table->integer('role_id');
$table->integer('user_id');
$table->timestamps();
});
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.我不确定数据透视表是否需要时间戳,所以请试验一下.
Ari*_*que 11
虽然它是一个旧帖子,但我可以提供更新的内容.对于Laravel5,杰弗里的方式,制定了一系列Laravel5发电机扩展其增强的生成器功能php artisan的
make:migration:schemamake:migration:pivotmake:seed对于用户和角色之间的多对多关系,您可以使用
php artisan make:migration:pivot users role
Run Code Online (Sandbox Code Playgroud)
它将生成所需的迁移类.您无需为此手动编码.
小智 2
据我所知,不会创建任何关系表。您需要做的是role_id在您的users表上添加一个,以便当您创建用户时,角色的 ID 将存储在那里。这将使您能够选择所有用户(role_id == '1'无论位于何处)。例如:
$admins = User::where('role_id', '=', 1);
Run Code Online (Sandbox Code Playgroud)
表上的ROLES记录ID='1'是 admin。因此,再次回答您的问题,不会创建关系表,而是关系以role_id每个用户的列的形式存在于两个表中。出于兴趣,您使用外键吗?
如果你想要一个关系表,你可以创建一个名为或 的东西,并将anduser_roles存储在其中,但是我认为使用上述方法更容易,因为这样你就可以使用 Laravel/Eloquent 的所有优点。role_iduser_id
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
38515 次 |
| 最近记录: |