当前位置: 首页 > 知识库问答 >
问题:

Laravel是如何创建数据透视表的?

符修杰
2023-03-14

在Laravel 4中,当使用4.2文档中描述的多对多关系时,我如何让Laravel为我创建透视表?

我是否需要在我的迁移中为所涉及的两个模型添加一些东西?是否需要手动创建数据透视表的迁移?或者Laravel如何知道创建透视表?

到目前为止,我所做的一切就是将属性添加到两个相应的模型中,即:

class User extends Eloquent 
{
    public function roles()
    {
         return $this->belongsToMany('Role');
     }
 }

但是,这不会触发透视表的创建。我错过了哪一步?


共有3个答案

汝吕恭
2023-03-14

为了扩展本的答案(我试图编辑它,但评论家说它添加了太多):

要添加外键约束,请确保在透视表中,如果alpha id未签名,alpha_id也未签名。这个迁移将在Ben的答案(2)之后运行,因为它改变了当时创建的表。

public function up()
{
    Schema::table('alpha_beta', function(Blueprint $table)
    {
        $table->foreign('alpha_id')->references('id')->on('alpha');
        $table->foreign('beta_id')->references('id')->on('beta');
    });
}
司空温书
2023-03-14

我使用Jeffrey Way的Laravel-4-发电机或Laravel-5-发电机-扩展。

然后你可以使用这个artisan命令:

php artisan generate:pivot table_one table_two
余善
2023-03-14

看起来数据透视表确实需要手动创建(即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.)如果需要,添加外键约束。(我还没说到那一点)。

现在,要使用beta中的键对alpha表进行种子设定,您可以在AlphaTableSeeder中执行以下操作:

public function run()
{
    DB::table('alpha')->delete();

    Alpha::create( array( 
        'all'           =>  'all',
        'your'          =>  'your',
        'stuff'         =>  'stuff',
    ) )->beta()->attach( $idOfYourBeta );
}
 类似资料:
  • 事实上,我的问题很简单,但我找不到任何答案。 我使用的是Laravel Elotent,我有3张桌子: 一个数据透视表叫做: 我已经从我的公司对象中获得了,我正在尝试获取

  • 我是vba新手,正在尝试使用vba和Excel创建。 我想创建像下面的图像作为输入表。 我试图添加、、、的行标签,值为、和。不为SHEET1生成任何透视表。

  • 问题内容: 我需要从大约6000万行的数据集中创建一个2000列,大约30-50百万行的数据透视表。我曾尝试过旋转100,000行的数据块,但这种方法行得通,但是当我尝试通过先执行.append()然后再执行.groupby(’someKey’)。sum()来重组DataFrame时,我的所有内存都被占用了和python最终崩溃。 如何在有限的RAM量下处理如此大的数据? 编辑:添加示例代码 下面

  • 问题内容: 我是一起定义关系和框架的新手,我只是习惯于原始SQL。我做了家庭作业(google + Laravel文档),但是我认为我不太了解它。 以下是相关信息:用户表: 挑战表: User_challenge_links Challenge_sub_categories 所以我的目标..用户->挑战。 关系: 一个用户有许多User_challenge_links 一个User_challen

  • 我下面是一个教程,名为在laracast中的增量API由Jeffrey Way。 Laravel 4 faker类种子和Laravel 5.4之间的编码不同。 我仍然遵循教程“Seeders Reloated”中相同的代码行。现在,我只能说“LessonTagTableSeeder类不存在” 标签进料器 LessonTag表播种机 数据库搜索 我能够使用php artisan db:seed--c

  • 我正在组装一个简单的购物车系统,使用Laravel和Vue.js,来出售照片。每张照片都有不同的尺寸,每个尺寸的价格都不同。 我有以下表格: 我正在使用Vue.js对我的购物车控制器进行API调用,以操纵购物车。当用户单击“添加到篮子”按钮时,它会传递照片id和大小id。当然,我想从数据库而不是客户端获取所选项目的价格,以防止任何无礼行为,这自然意味着查询pivot表。 我的问题是,使用传递给控制