Обновление нескольких строк базы данных в Laravel

Мне нужен код для обновления нескольких строк базы данных, что-то вроде этого:

UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=1; UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=2; UPDATE values SET data='{"options":["male","female"],"default":"male"}' where project_id=1 and id=3; 

Через несколько часов я мог получить результат с этим, как это в laravel framework:

 $values = Value::where('project_id', $id)->get(); $sql = ""; foreach($request->fields as $field) { if(!empty($field->default)) { //New default value is set foreach($values as $value) { $data = json_decode($value->data, true); /**data column as json object in mysql database **/ $data["default"] = $field->default; $data = json_encode($data); $sql .= "update ".DB::connection()->getDatabaseName().".values set data='".$data."' where id="."$value->id;"; } } } DB::unprepared($sql); 

но этот код не является хорошей практикой! Поэтому мой вопрос:

Есть ли способ ORM сделать это лучше ?!

Вот простой способ сделать это.

 $values = Value::where('project_id', $id)->update(['data'=>$data]); 

Я нашел это по этой ссылке

Надеюсь, поможет.

  $values = Value::where('project_id', $id)->get(); $sql = ""; foreach($request->fields as $field) { if(!empty($field->default)) { //New default value is set foreach($values as $value) { $tmp=$value->data; $tmp->default = $field->default; $value->data = $tmp; $value->save(); } } } 

И в модели Value используйте Mutator и Accessor , как это

 public function getDataAttribute($value) { return json_decode($value); } public function setDataAttribute($value) { $this->attributes['data'] = json_encode($value); } 

См. Документацию http://laravel.com/docs/4.2/eloquent#accessors-and-mutators

Работа – https://yadi.sk/i/BnC3HYozehoy2