2017-10-15 1 views
1

하나의 필드 만 배열로 제공되는 경우 Laravel/Eloquent는 한 번의 호출로 여러 레코드를 만드는 방법을 제공합니까?Laravel Eloquent 하나의 필드가 배열로 제공되는 경우에만 여러 레코드 삽입

예를 들어 $ request가 아래 데이터와 함께 제공되지만 propIds 만 분해되어 배열로 제공되며 다른 모든 값은 모든 새 레코드에 대해 동일합니다.

{"_token": "kEKmrPzu4nCk35xJAMOgdl0kNdwUZvpECsBl91dH", 
"propIds": "126,129,71,82,77,64,69", 
"rate": "4", 
"cost": "55" 
} 

나는 foreach 문을하고 배열을 구축하고 Model::insert($newArray); 을 실행하지만 어쩌면 Laravel은 하나의 필드가 배열로 제공되는 경우에 대한 해결책을 제공한다 할 수있다. 감사.

지금은 단지 배열을 만든 다음 Model::insert($newArray); 가 자동으로 created_at를 추가하지 않습니다와 날짜 updated_at 여러 레코드를 삽입 Model::insert($newArray);

를 호출하는 foreach 루프를 사용하고 있습니다하십시오. 데이터베이스에 기본값으로 타임 스탬프를 추가했습니다.

+0

아니, 당신은 모든 필드 값을 제공했습니다. 삽입하기 전에지도를 작성하십시오. –

답변

0

예, 가능합니다.

Model::insert([ 
    ['prop_id' => 126, 'rate' => 4, 'cost' => 55], 
    ['prop_id' => 129, 'rate' => 4, 'cost' => 55], 
    ['prop_id' => 71, 'rate' => 4, 'cost' => 55], 
]); 

insert()가 하나의 DB 쿼리를 만들 것입니다 : 당신은 insert()를 사용하고이 형식에 새로운 배열을 작성해야합니다.

0

당신은 create 기능을 아래와 같이 Laravel 모델을 재정의 할 수

모델

namespace App\Models; 

class YourModel extends BaseModel 
{ 
    protected $fillable = [ 
    "_token", "propId", "rate", "cost" 
    ]; 

    // override 
    public static function create(array $attributes = []) 
    { 
    $propIds = array_explode(',', $attributes['propIds']); 

    foreach ($propIds as $key => $value) {   
     $model = new static([ 
     "_token" => $attributes['_token'], 
     "propId" => $value, 
     "rate" => $attributes['rate'], 
     "cost" => $attributes['cost'] 
     ]); 

     $model->save(); 
    } 
    } 
} 

컨트롤러

YourModel::create([ 
    "_token" => $request->input('_token'), 
    "propIds" => $request->input('propIds'), // "126,129,71,82,77,64,69" 
    "rate" => $request->input('rate'), 
    "cost" => $request->input('cost'), 
]); 
+0

새로운 방법을 정의하는 것이 더 합리적이라고 생각합니다. 'createMany'는 기존의'create' 메소드를 내부적으로 활용합니다. 이로 인해 원래의'create' 메쏘드는 미래에 필요할지도 모르는 인스턴스들에게는 영향을 미치지 않습니다. – fubar

+0

@fubar 네, 그렇게 될 수 있습니다 ... –