Laravel5 使用 JSON 和 Seeder 提供数据库

Posted

技术标签:

【中文标题】Laravel5 使用 JSON 和 Seeder 提供数据库【英文标题】:Laravel5 Using JSON & Seeder to feed database 【发布时间】:2017-08-20 14:35:11 【问题描述】:

我正在尝试使用 laravel 有用的播种功能来使用自定义数据填充表格。而不是使用 Seeder 使用 Faker Im。因此我创建了一个:

    ‘/json/’文件夹并将我的 JSON 数据文件放在那里。 最后,在播种器中,我将数据映射到 JSON 对象属性。

这是我的代码。

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

class JsonTableSeeder extends Seeder

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    
        $json = File::get("/json/cell-1.json");
        $data = json_decode($json);
        $array1 = $data->toArray();
        foreach ($array1['products'] as $obj) 
            DB::table('products')->insert(array(
                'id' => $obj->id,
                'name' => $obj->productName,
                'sku' => $obj->productSku
            ));
            foreach ($data['relatedProducts'] as $obj) 
                DB::table('products_related')->insert(array(
                    'sku' => $obj->sku
                ));
            
        
    

但我收到许多不同的错误,例如:

调用未定义的方法 stdClass::toArray()

不能使用 stdClass 类型的对象作为数组(如果我不使用 $array1 = $data->toArray(); 并直接使用 $data。

任何帮助表示赞赏。

【问题讨论】:

我能知道,你把你的 json 文件放在哪里了吗?我无法播种我的 json 数据 【参考方案1】:

json_decode 默认会返回一个对象。如果您想使用数组,只需使用$assoc = true

$data = json_decode($json, true);

来自文档:

关联

当为 TRUE 时,返回的对象将被转换为关联数组。

http://php.net/json_decode

【讨论】:

【参考方案2】:

$data 是一个普通对象而不是 laravel 集合,因此它上面没有 toArray。您可以通过以下操作将对象类型转换为数组

$array1 = (array) $data;

【讨论】:

以上是关于Laravel5 使用 JSON 和 Seeder 提供数据库的主要内容,如果未能解决你的问题,请参考以下文章

Laravel5.1 填充数据库

Laravel5.1 模型--ModelFactory

laravel5.4 关于数据填充的知识

Class StatusesTableSeeder does not exist 如何解决

Laravel 5.* 执行seeder命令出现错误的解决方法

Laravel 5:找不到 DB 种子类