2016-10-23 8 views
0

私はテーブルProductにデータを挿入した後、出力オブジェクト$productを持っている:Laravelに挿入するには?

私が持っているモデル Product
$product = Product::create($data); 

public function images() 
    { 
     return $this->hasMany("App\ProductImage"); 
    } 

のIは、テーブルproduct_imagesに画像を追加しよう:

$product->images()->save(new ProductImage(UploadFiles::$files)); 

関係テーブルはproduct.id = product_imagesです。

だから、私はメッセージを取得挿入後:

General error: 1364 Field 'image' doesn't have a default value (SQL: insert into `product_images` (`product_id`) values (21)) 

答えて

2

OK、まず者は、一つの画像の保存に対処しましょう:

あなたはidimageproduct_idproduct_imagesテーブルを持っていると仮定し、あなたが添付しますイメージは次のようになります:

$image = new ProductImage(['image' => 'myImage.jpg']); 
$product->images()->save($image); 

これで、あなたはそのディレクトリを保存できないようですあなたはforループに入れる必要があります。私はあなたのUploadFiles::$filesの形式を知らないが、私はそれを保存するファイル名のリストだけだと仮定します:

$files = UploadFiles::$files; 

foreach($files as $file){ 
    $image = new ProductImage(['image' => $file]); 
    $product->images()->save($image); 
} 

また、あなたは配列として全体を作成し、saveManyを使用することができ、そのうよりよい:

$files = UploadFiles::$files; 
$productImages = []; 

foreach($files as $image){ 
    $productImages[] = new ProductImage(['image' => $image]); 
} 

$product->images()->saveMany($productImages); 
+0

'UploadFiles :: $ files'を1つのフィールド'「画像」=>「パス」 ' – Dev

+0

まあ持つ配列で、そのエラーは、それが画像フィールドを見つけることができないと言います。 'ProductImage'モデルの' $ fillable'配列に追加しましたか? –

+0

ありがとうございました。できます! – Dev

関連する問題