首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给出laravel种子子类的分类id

给出laravel种子子类的分类id
EN

Stack Overflow用户
提问于 2017-06-06 07:29:18
回答 1查看 1.3K关注 0票数 0

我尝试在laravel 5.4中添加带有seed的数据,假设我有10个类别,我通过种子将它们添加到我的数据库中,现在我也有了另一个子类别的种子,但是在添加我的子类别之前,我想知道哪个是我之前导入的类别。我该怎么做?

更新:

我发现我的问题可能会让一些人困惑,所以我试着解释一下,

这是我的category种子。

代码语言:javascript
复制
<?php

use Illuminate\Database\Seeder;

class CategoriessTableSeeder extends Seeder {

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

        $categories = array(
            array('name' => 'Accounting/Finance', 'slug' => 'hccounting_finance'),
            array('name' => 'Admin/Human Resources', 'slug' => 'admin_human_resources'),
            array('name' => 'Arts/Media/Communications', 'slug' => 'arts_media_communications'),
            array('name' => 'Building/Construction', 'slug' => 'building_construction'),
            array('name' => 'Computer/Information Technology', 'slug' => 'computer_information_technology'),
            array('name' => 'Education/Training', 'slug' => 'education_training'),
            array('name' => 'Engineering', 'slug' => 'engineering'),
            array('name' => 'Healthcare', 'slug' => 'healthcare'),
            array('name' => 'Hotel/Restaurant', 'slug' => 'hotel_restaurant'),
            array('name' => 'Manufacturing', 'slug' => 'manufacturing'),
            array('name' => 'Sales/Marketing', 'slug' => 'sales_marketing'),
            array('name' => 'Sciences', 'slug' => 'sciences'),
            array('name' => 'Services', 'slug' => 'services'),
            array('name' => 'Others', 'slug' => 'others'),
        );

        DB::table('categories')->insert($categories);
    }
}

我有另一个类似的子类别在这里是:

代码语言:javascript
复制
<?php

use Illuminate\Database\Seeder;

class SubategoriessTableSeeder extends Seeder {

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

        $subcategories = array(
            array('name' => 'Audit & Taxation Jobs', 'slug' => 'audit_taxation_jobs', 'category_id' => ''),
        );

        DB::table('subcategories')->insert($subcategories);
    }
}

在这个示例中,'category_id' => ''必须在category seed中获取'Accounting/Finance类别的id/名称。

现在我的问题是怎么做?

更新2:

错误的

照明\数据库\QueryException SQLSTATE23000:完整性约束违反: 1451不能删除或更新父行:外键约束失败(jobid.ads,约束ads_subcateg ory_id_foreign外键(subcategory_id)引用subcategories (id)) (SQL:从subcategories删除) PDOException SQLSTATE23000:完整性约束违反: 1451不能删除或更新父行:外键约束失败 (jobid.ads,约束ads_subcateg ory_id_foreign外键(subcategory_id)引用subcategories (id))

所用代码:

代码语言:javascript
复制
<?php

use Illuminate\Database\Seeder;
use Carbon\Carbon;

class SubcategoriesTableSeeder extends Seeder {

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


            $categoryFinance = Category::select("id")->whereSlug("hccounting_finance")->firstOrFail();
            $subcategories = array(
             array('name' => 'Audit & Taxation Jobs', 'category_id' => $categoryFinance,  'slug' => 'audit_taxation_jobs', 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s')),
             array('name' => 'Banking/Financial Jobs', 'category_id' => $categoryFinance, 'slug' => 'banking-financial_jobs', 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s')),
             array('name' => 'Corporate Finance/Investment Jobs', 'category_id' => $categoryFinance, 'slug' => 'corporate_finance_investment_jobs', 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s')),
             array('name' => 'General/Cost Accounting Jobs', 'category_id' => $categoryFinance, 'slug' => 'general_cost_accounting_jobs', 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s')),
         );

         $categoryAdmin = Category::select("id")->whereSlug("admin_human_resources")->firstOrFail();
         $subcategories = array(
            array('name' => 'testing', 'slug' => 'tesingsubs', 'category_id' => $categoryAdmin, 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), 'updated_at' => Carbon::now()->format('Y-m-d H:i:s')),
        );

        DB::table('subcategories')->insert($subcategories);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-06-06 12:22:38

为了将您的类别与子类别关联起来,您应该遵循文档(https://laravel.com/docs/5.4/eloquent-relationships)中的逻辑(取决于您的关系-N-1N-N)。似乎您需要attach()方法。

因此,在创建类别条目之后,如果您遵循了模式约定,则可以将逻辑应用于所有类型或关系,甚至是多态关系。

编辑:

编辑之后,您似乎需要一种方法再次访问表的条目,以便将它们关联起来。

所以,你可以:

代码语言:javascript
复制
$categoryFinance = Category::select("id")->whereSlug("hccounting_finance")->firstOrFail();

在创建数组之前,在您的SubategoriessTableSeeder run()函数中。

然后在你的subcategory_id中给出这个id。对于你需要关联的所有类别也是如此。

编辑2

请再检查一下你的外键是否正确。在这种情况下,您不能删除子类别表,因为类别“需要”子In。这就是违反约束的原因。你不需要删除这些表。你只需要“喂”他们。

因此,尝试删除“删除”语句。

编辑3

我认为这个错误现在已经很明显了。数据库中没有id为2的类别。但是,再次检查键是否正确关联(这是一个SQL问题,而不是Laravel问题)。

运行迁移(如果有的话),并再次运行种子器,并使用正确的顺序(首先是类别,然后是子类别--首先是依赖项,然后是一般的依赖项)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44383866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档