首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel中使用updateOrCreate实现多个数据插入

在Laravel中使用updateOrCreate实现多个数据插入
EN

Stack Overflow用户
提问于 2014-11-24 14:12:54
回答 2查看 22.5K关注 0票数 8

我使用以下插入数组Laravel Eloquent ORM中插入多个条目

代码语言:javascript
运行
复制
$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的用法,并在我的一些模块中成功地使用了它(即)

代码语言:javascript
运行
复制
Model::updateOrCreate($attributes = array('key' => 'value'), $values = array('key' => 'value'));

我的问题是如何编辑上面的插入片段,以便在其中使用Model::updateOrCreate。我的$attributes字段是‘fk_ $values _id’、‘fk_user_id’、'fk_exercises_id‘,以及要更改的$values中的其余字段。

我不知道如何实现这一点。请帮忙..。

EN

回答 2

Stack Overflow用户

发布于 2014-11-28 11:47:42

你可以试着,

First Way

代码语言:javascript
运行
复制
 $user = User::firstOrNew(array('name' => 'satish'));
 $user->field = 'value';
 $user->save();

如果找到,它将检查用户name=satish,然后返回它。如果未找到,则创建新的并返回。然后可以设置字段值。

查一下这个链接。http://laravel.com/docs/4.2/eloquent#insert-update-delete

第二道M年检记录存在。

代码语言:javascript
运行
复制
 $arr=array('field'=>"value");
 $row = User::find($id);
  if ($row === null) {
       //Insert your record 

  } else {
       //update your record
  }

更新

您还可以使用updateOrCreate -更新现有的模型或创建一个新的模型,如果不存在。updateOrCreate坚持该模型,因此不需要调用save()

例子-

代码语言:javascript
运行
复制
// 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]
);
票数 9
EN

Stack Overflow用户

发布于 2014-11-29 14:42:57

我认为您正在使用自定义的laravel框架,所以您有了UpdateOrCreate方法,因为如果我的假设比下面编写的代码对您的应用程序有用,laravel没有提供这样的方法。

代码语言:javascript
运行
复制
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);
  }
}

但是,如果您没有使用这样的自定义框架,请尝试使用下面的代码,它可能运行良好。

代码语言:javascript
运行
复制
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
  }
}

祝你好运.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27106825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档