我使用以下插入数组在Laravel Eloquent ORM
中插入多个条目
$i = 0;
foreach($exerciseValArray as $kkey=>$exerciseValue){
if($exerciseValue['exercise'] =='' || $exerciseValue['section_type'] == ''){
return Response::JSON(array('errors'=>array('Error in workout exercise section')));
}
$exerciseData = explode(',',$exerciseValue['exercise']);
foreach($exerciseData as $exerciseid){
$insertArray[$i]['fk_workouts_id'] = $id;
$insertArray[$i]['fk_users_id'] = $userId;
$insertArray[$i]['fk_exercises_id']= $exerciseid;
$insertArray[$i]['section'] = $exerciseValue['section_type'];
$insertArray[$i]['status'] = 1;
$insertArray[$i]['item_index'] = $index+$kkey+1;
$insertArray[$i]['updated_at'] = $workoutDetails['updated_at'];
$i++;
}
}
WorkoutExercise::insert($insertArray);
以上代码工作良好,并将数据数组插入到数据库中。
我已经学会了Model::updateOrCreate
的用法,并在我的一些模块中成功地使用了它(即)
Model::updateOrCreate($attributes = array('key' => 'value'), $values = array('key' => 'value'));
我的问题是如何编辑上面的插入片段,以便在其中使用Model::updateOrCreate
。我的$attributes
字段是‘fk_ $values
_id’、‘fk_user_id’、'fk_exercises_id‘,以及要更改的$values
中的其余字段。
我不知道如何实现这一点。请帮忙..。
发布于 2014-11-28 11:47:42
你可以试着,
First Way
$user = User::firstOrNew(array('name' => 'satish'));
$user->field = 'value';
$user->save();
如果找到,它将检查用户name=satish
,然后返回它。如果未找到,则创建新的并返回。然后可以设置字段值。
查一下这个链接。http://laravel.com/docs/4.2/eloquent#insert-update-delete
第二道M年检记录存在。
$arr=array('field'=>"value");
$row = User::find($id);
if ($row === null) {
//Insert your record
} else {
//update your record
}
更新
您还可以使用updateOrCreate
-更新现有的模型或创建一个新的模型,如果不存在。updateOrCreate
坚持该模型,因此不需要调用save()
。
例子-
// If there's a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99]
);
发布于 2014-11-29 14:42:57
我认为您正在使用自定义的laravel框架,所以您有了UpdateOrCreate方法,因为如果我的假设比下面编写的代码对您的应用程序有用,laravel没有提供这样的方法。
foreach($exerciseValArray as $kkey=>$exerciseValue){
if($exerciseValue['exercise'] =='' || $exerciseValue['section_type'] == ''){
return Response::JSON(array('errors'=>array('Error in workout exercise section')));
}
$exerciseData = explode(',',$exerciseValue['exercise']);
$attr_array = array('fk_workouts_id','fk_users_id','fk_exercises_id','section','status','item_index','updated_at');
foreach($exerciseData as $exerciseid){
$val_array = array($userId,$exerciseid,$exerciseValue['section_type'],1,$item_index,$workoutDetails['updated_at']);
WorkoutExercise::updateOrCreate($attr_array,$val_array);
}
}
但是,如果您没有使用这样的自定义框架,请尝试使用下面的代码,它可能运行良好。
foreach($exerciseValArray as $kkey=>$exerciseValue){
if($exerciseValue['exercise'] =='' || $exerciseValue['section_type'] == ''){
return Response::JSON(array('errors'=>array('Error in workout exercise section')));
}
$exerciseData = explode(',',$exerciseValue['exercise']);
foreach($exerciseData as $exerciseid){
$item_index = $index+$kkey+1;
// Retrieve the record by the fk_workouts_id, or create it if it doesn't exist...
$exercise = WorkoutExercise::firstOrCreate($attributes = array('fk_workouts_id' => $id));
/* assign the values of other fields to store in database table*/
$exercise->fk_users_id = $userId;
$exercise->fk_exercises_id = $exerciseid;
$exercise->section = $exerciseValue['section_type'];
$exercise->status = 1;
$exercise->item_index = $item_index;
$exercise->updated_at = $workoutDetails['updated_at'];
$exercise->save(); // update the record
}
}
祝你好运.
https://stackoverflow.com/questions/27106825
复制相似问题