Каков наилучший подход для вставки и обновления внешнего ключа на основе нескольких строк с помощью Eloquent? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть таблица с названием «ответы», в которой будет храниться ответ клиента на вопросник.Таблица выглядит следующим образом:

answers
+-----------------+
|id (PK)          |
|customer_id (FK) |
|question_id (FK) |
|value            |
|_________________|

Мой запрос будет выглядеть следующим образом

{
    "customer_id":1,
    "answer": {
        "1":"My Name", //"1" is question_id , "My Name" is value
        "2":"My Phone Number" //"2" is question_id, "My Phone Number" is value
    }
}

Я пытаюсь выполнить один запрос или одно действие в Eloquent вместо foreachОтветьте один за другим, чтобы проверить, если question_id и customer_id уже существуют, он обновится, в противном случае он вставит ответ в таблицу 'answers'.

Выполнением foreach /Зацикливание данных по одному на ответ, это не должно быть трудной проблемой.Однако, если я уже получил 3000 ++ строк в таблице ответов, это было бы большой проблемой.

Каков наилучший подход для этого?Может быть, есть какая-нибудь сторонняя библиотека, которую я могу использовать для массовой вставки / обновления нескольких строк на основе проверки внешнего ключа?

1 Ответ

0 голосов
/ 09 февраля 2019

Вы можете сделать это с помощью метода UpdateORCreate laravel, который делает именно то, что вы хотите.

В общем случае утверждение выглядит следующим образом:

$model=Model::UpdateOrCreate(["condtion1"=>"value1",...],["field1"=>"value1",...]);

В вашем случае это 'будет что-то вроде ниже:

$answer=Answer::UpdateOrCreate(["customer_id"=>$customer_id,"question_id"=>$question_id],["value"=>$value]);

Для получения дополнительной информации, проверьте Красноречивая документация Laravel (Другие методы создания)

...