/** * PUT request, we're using it here to mean 'replace the record with' */ public function update($id) { $v = Validator::make(Input::all(), ['name' => 'required|string', 'questions' => 'array', 'taggable' => 'array']); if ($v->fails()) { return Response::json($v->errors(), 400); } $questionnaire = Questionnaire::find($id); if (is_null($questionnaire)) { return Response::json(['error' => 'no such questionnaire found'], 404); } $questionIds = $questionnaire->questions->lists('id'); Question::destroy($questionIds); if (Input::has('questions')) { foreach (Input::get('questions') as $question) { Question::create(['question' => $question, 'questionnaire_id' => $questionnaire->id]); } } $tagListIds = $questionnaire->tagLists->lists('id'); $questionnaire->tagLists()->detach($tagListIds); if (Input::has('taggable')) { foreach (Input::get('taggable') as $tagList) { $T = TagList::firstOrNew(['name' => $tagList['name']]); $questionnaire->tagLists()->save($T); if (!$T->exists) { // it's a new one! $T->save(); } } } $questionnaire->name = Input::get('name'); $questionnaire->touch(); $questionnaire->push(); // if these are modified they won't be shown... $questionnaire->load('tagLists', 'tagLists.tags', 'questions'); return Response::json($this->reformatTagsAndQuestions($questionnaire), 200); }