在 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/

10-14 15:11
查看更多