在 Laravel 4 中,当处理 the 4.2 docs 中描述的多对多关系时,我如何才能真正让 Laravel 为我创建数据透视表?
我是否需要在迁移中为涉及的两个模型添加一些内容?我是否需要手动为数据透视表创建迁移?或者 Laravel 如何知道创建数据透视表?
到目前为止,我所做的只是将 belongsToMany
信息添加到两个各自的模型中,即
class User extends Eloquent
{
public function roles()
{
return $this->belongsToMany('Role');
}
}
但是,这不会触发数据透视表的创建。我错过了什么步骤?
最佳答案
看起来好像确实需要手动创建数据透视表(即 Laravel 不会自动创建)。这是如何做到的:
1.) 创建一个新的迁移,按字母顺序使用单数表名(默认):
php artisan make:migration create_alpha_beta_table --create --table=alpha_beta
2.) 在新创建的迁移中,将 up 函数更改为:
public function up()
{
Schema::create('alpha_beta', function(Blueprint $table)
{
$table->increments('id');
$table->integer('alpha_id');
$table->integer('beta_id');
});
}
3.) 如果需要,添加外键约束。
(我还没有达到那个程度)。
现在要播种 alpha 表,使用 beta 中的键,您可以在 AlphaTableSeeder 中执行以下操作:
public function run()
{
DB::table('alpha')->delete();
Alpha::create( array(
'all' => 'all',
'your' => 'your',
'stuff' => 'stuff',
) )->beta()->attach( $idOfYourBeta );
}
关于laravel - Laravel 如何创建数据透视表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15821822/