Bagaimana kita bisa melakukan penyisipan basis data massal di Laravel menggunakan Eloquent ORM?
Saya ingin menyelesaikan ini di Laravel: https://stackoverflow.com/a/10615821/600516 tapi saya mendapatkan kesalahan berikut.
SQLSTATE [HY093]: Nomor parameter tidak valid: nama campuran dan parameter posisi.
has_many
hubungan dengan model Anda?Jawaban:
Anda bisa menggunakannya
Eloquent::insert()
.Sebagai contoh:
sumber
Eloquent
sebenarnya. Itu hanya proksi panggilan keQuery\Builder@insert()
metode. Tidak ada cara untuk menyisipkan beberapa baris secara efisien dengan Eloquent, juga tidak menawarkan metode apa pun untuk sisipan massal.Kami dapat memperbarui jawaban GTF untuk memperbarui cap waktu dengan mudah
Perbarui: untuk menyederhanakan tanggal kita dapat menggunakan karbon seperti yang disarankan @Pedro Moreira
UPDATE2: untuk laravel 5, gunakan
updated_at
sebagai gantimodified_at
sumber
$now
variabel:$now = Carbon::now('utc')->toDateTimeString();
. Kemudian gunakan saja'created_at' => $now, 'updated_at' => $now
untuk setiap penyisipan.Carbon
dalam situasi ini? Ada apa dengan inidate("Y-m-d H:i:s")
?Bagi siapa pun yang membaca ini, periksa
createMany()
metode .sumber
Model::createMany()
.Ini adalah bagaimana Anda melakukannya dengan cara yang lebih fasih,
sumber
Saya mencari berkali-kali untuk itu, akhirnya menggunakan custom
timestamps
seperti di bawah ini:sumber
Eloquent::insert
adalah solusi yang tepat tetapi tidak akan memperbarui cap waktu, sehingga Anda dapat melakukan sesuatu seperti di bawah iniIdenya adalah menambahkan Created_at dan updated_at pada seluruh array sebelum melakukan insert
sumber
Dari Laravel 5.7 dengan
Illuminate\Database\Query\Builder
Anda dapat menggunakan metode insertUsing.sumber
UserSubscription
adalah nama model saya. Ini akan mengembalikan "true" jika berhasil memasukkan "false".sumber
Mungkin cara yang lebih Laravel untuk memecahkan masalah ini adalah dengan menggunakan koleksi dan loop itu memasukkan dengan model mengambil keuntungan dari cap waktu.
EDIT:
Maaf atas kesalahpahaman saya. Untuk memasukkan secara massal ini bisa membantu dan mungkin dengan ini Anda dapat membuat seeder yang baik dan sedikit mengoptimalkannya.
sumber
Untuk penyisipan hubungan kategori, saya menemukan masalah yang sama dan tidak tahu, kecuali bahwa dalam model fasih saya, saya menggunakan Self () untuk memiliki instance dari kelas yang sama di muka untuk merekam beberapa menyimpan dan mengambil id.
tanpa "$ obj = new Self ()" itu hanya menyimpan satu catatan (ketika $ obj adalah $ this)
sumber
Masalah terpecahkan ... Ubah tabel untuk dimigrasi
Larutan:
sumber