2017-03-27 11 views
0

laravelの便利なシード関数を使用してカスタムデータをテーブルに取り込もうとしています。代わりにFaker ImをSeederを使用して使用します。その結果、私は:Laravel5 JSON&Seederを使用してデータベースにフィードする

  1. '/ json /'フォルダを作成し、そこでJSONデータファイルを配置します。
  2. 最後に、シーダーでデータを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を直接使用してください。

助けてください。

+0

私が知ることができ、どこにあなたのJSONファイルを入れたのですか?私は私のjsonのデータを播種することはできません –

答えて

1

$ dataは、ラーベルコレクションではないプレーンオブジェクトです。そのため、toArrayはありません。あなたは、デフォルトでは、オブジェクトを返します

$array1 = (array) $data; 
+0

ありがとう!私はそれがコレクションを通過していたと思います。あなたが正しいです... –

1

json_decodeの下に行うことで、アレイにあなたのオブジェクトをキャスト入力することができます。配列を操作する場合は、$assoc = trueを使用してください。ドキュメントから

$data = json_decode($json, true);

はTRUE、オブジェクトが返さ

連想を連想配列に変換されます。

http://php.net/json_decode

関連する問題