Как написать краткий код для массива входных данных в Laravel? - PullRequest
0 голосов
/ 25 марта 2020

Я новичок ie до Laravel, есть ли способ, которым я могу написать этот код чище / кратко?
Он имеет массив входных данных:

$answers = $request->answer;
foreach ($answers as $answer){
    $ans = new Answer;
    $ans->question_id=$question->id;
    $ans->answer=$answer['body'];            
    $ans->is_correct=(array_key_exists('check',$answer) && $answer['check'] == 'on')?true:false;     
    $ans->save();
} 

Возможно как этот:

Question::create($request->all() +['quiz_id' => $quiz->id,'imgpath'=>$path]);

1 Ответ

0 голосов
/ 25 марта 2020

Да;

Модели очень динамичны c в том, как они принимают ввод.

Один из способов - который я обычно предпочитаю вводить, - вызывать create().

Для instace:

Question::create([
  "question_id" => $question->id,
  "answer" => $answer['body'],
  "is_correct" => array_key_exists('check', $answer) ? 
                  $answer['check'] === 'on' :
                  false,
]);

Это игнорирует вашу необходимость инициировать Question::class и позволяет просто вызывать insert.

Еще один мощный инструмент, включенный в Laravel модели Facades. Если вы хотите вызвать пользовательский метод, такой как Question::insertNew(), в вашу модель; Вы можете использовать Facade, который автоматически инициирует класс и правильно вызывает функцию - с учетом контекста:

, например,

Вопрос. php

class Question extends Model
{
  public function insertNew( $date ) {
    // do whatever with $data
  }
}

QuestionsController. php

use Facades\App\Question;

class QuestionsController extends Controller {

  // all functions

  public function store(Request $request) {
    $question = Question::insertNew([/*question array*/]);

    return response([]);
  }

  // remaining functions

}

Вы действительно должны проверить документы Laravel на модели . Он объясняет, как работает их ядро, и дает вам стратегии по улучшению их встроенных функций в рамках ваших собственных пользовательских методов.


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...