在Laravel种子中给出子类别的类别ID



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

更新:

我发现我的问题可能会使某些人感到困惑,所以我尝试解释更多,

这是我的category种子。

<?php
use IlluminateDatabaseSeeder;
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);
    }
}

我在此处有另一个类似的子类别,它是:

<?php
use IlluminateDatabaseSeeder;
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] sqlstate [23000]:完整性 约束违规:1451无法删除或更新父行: 外键约束失败(jobidads,约束ads_subcateg ory_id_foreign外键(subcategory_id(参考 subcategories(id(((SQL:从subcategories删除(

 [PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails

(jobidads,约束ads_subcateg ory_id_foreign外键(subcategory_id(参考subcategories(id((

使用的代码:

<?php
use IlluminateDatabaseSeeder;
use CarbonCarbon;
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);
    }
}

为了将您的类别与子类别相关联,您应该在文档中遵循逻辑(取决于您的关系-N-1 N-N((https://laravel.com/docs/5.4/雄辩关系(。看来您需要附加方法。

因此,在创建类别条目后,如果您遵循了架构公约,则可以为各种或关系应用逻辑,即使是对多态的逻辑。

编辑:

编辑后,似乎您需要一种再次访问表的条目才能将它们关联的方法。

所以,您可以:

$categoryFinance = Category::select("id")->whereSlug("hccounting_finance")->firstOrFail();

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

,然后在您的subCategory_id中给出该ID。您需要关联的所有类别也是如此。

编辑2

请再次检查您的外键是否正确。在这种情况下,您无法删除子类别表,因为类别"需要"子ID。这就是约束违规的来源。您不需要删除这些表..您只需要"馈送种子"它们。

因此,尝试删除"删除"语句。

编辑3

我认为现在的错误现在很明显..您的数据库中没有ID的类别。但是,再次检查键是否正确关联(这是SQL,而不是Laravel问题(。

运行迁移(如果有的话(,并以正确的顺序(第一类,然后是子类别 - 首先为依赖项,然后是依赖性的迁移(

最新更新