微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Laravel中将条目添加到数据透视表中?

如何解决如何在Laravel中将条目添加到数据透视表中?

在Laravel中为每个整体创建数据透视表时,我需要帮助

我有以下三个表

Abilities                ability_model                 Models
    +----------------+   +----------------------+   +-----------------+
    | id  | name     |   |ability_id| model_id  |   | id  | name      |
    +----------------+   +----------------------+   +-----------------+
    | 1   | View     |   |         |            |   | 1   | Question  |
    |----------------|   |----------------------|   |-----------------|
    | 2   | Create   |   |         |            |   | 2   | Answer    |
    |----------------|   |----------------------|   |-----------------|
    | 3   | Update   |   |         |            |   | 3   | User      |
    |----------------|   |----------------------|   +-----------------+
    | 4   | Delete   |   |         |            |
    +----------------+   +----------------------+

如何使用工厂和播种机制作数据透视表

这是我的能力工厂:

<?PHP

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Model;
use Faker\Generator as Faker;

$factory->define(Model::class,function (Faker $faker) {
    return [
        //
    ];
});

这是我的能力播种者

<?PHP

use App\Ability;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;

class AbilitySeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      DB::table('abilities')->insert([
        'name'=>'Delete'
      ]);
    }
}

这是我的模型工厂:

<?PHP

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Model;
use Faker\Generator as Faker;

$factory->define(Model::class,function (Faker $faker) {
    return [
        //
    ];
});

这是我的模特播种者

<?PHP

use App\Model;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;

class ModelSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      DB::table('models')->insert([
        'name'=>'Question'
      ]);
    }
}

我应该在哪里添加foreach循环,应该如何编写它才能将每个功能分配给每个模型?

解决方法

当然,手动指定每个模型种子的属性很麻烦。相反,您可以使用模型工厂方便地生成大量数据库记录。首先,查看model factory documentation以了解如何定义工厂。定义工厂后,可以使用工厂助手功能将记录插入数据库中。

例如,让我们创建50个abilities并为每个model附加一个关系:

<?php

use App\Ability;
use App\Model;
use Illuminate\Database\Seeder;

class AbilitySeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(Ability::class,50)->create()->each(function ($ability) {
            $ability->model()->attach(factory(Model::class,rand(1,5))->create());
        })
    }
}

当然,如上所述,您需要正确定义工厂才能使其正常工作。

此外,您将需要在Ability模型中正确定义与模型的关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。