Як вставити кілька рядків з одного запиту, використовуючи красномовне / вільне слово


143

У мене є такий запит:

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

і, як очікувалося, я отримую такий результат:

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

Чи є спосіб скопіювати вищезазначений результат в іншу таблицю, щоб моя таблиця виглядала так?

ID|user_id|subject_id
1 |8      |9
2 |8      |2

Проблема, яку я маю, полягає в тому, що $queryможна очікувати будь-яку кількість рядків і тому я не впевнений, як повторити невідому кількість рядків.


на випадок, якщо комусь це все-таки потрібно: github.com/laravel/framework/isissue/1295#issuecomment-193025045
4givN

Відповіді:


292

Зробити об'ємну вставку в Laravel дуже просто, використовуючи Eloquent або конструктор запитів.

Можна використовувати наступний підхід.

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];

Model::insert($data); // Eloquent approach
DB::table('table')->insert($data); // Query Builder approach

У вашому випадку ви вже маєте дані в межах $queryзмінної.


7
Використовуйте метод -> toArray () для колекції об'єктів.
Крешник Хасанай

35
Він не вставляє часові позначки.
guy_fawkes

20
додайте у свій масив 'created_at' => дата ('Ymd H: i: s'), 'modified_at' => дата ('Ymd H: i: s'). джерело: stackoverflow.com/a/26569967/1316842
JR Tan

8
Цікаво, чому Laravel не має для цього чогось типу "createMany".
Абхішек

4
Як мені отримати ідентифікатори?
Лувія

21

використовуючи красномовний

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096),
    array('user_id'=>'Coder 2', 'subject_id'=> 2048),
    //...
);

Model::insert($data);

insert - це метод побудови запитів. Аксесуар та мутатори не працюватимуть із цією вставкою
Хассан тато Хан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.