Isu Laravel: Masalah mengemas kini mempunyai Banyak rekod perhubungan
P粉054616867
2023-08-30 21:47:17
<p>Saya mempunyai model Pengguna yang mempunyai banyak hubungan dengan model Jenama dan saya menghadapi masalah mengemas kini Jenama pengguna dengan betul. </p>
<p>Saya mempunyai borang yang membolehkan pengguna memasukkan/mengalih keluar/mengemas kini jenama mereka sendiri dalam medan teks, kaedah yang saya gunakan pada masa ini untuk mengemas kini jenama pengguna selepas pengguna memasuki atau mengedit jenama adalah untuk memadam semua jenama sedia ada yang berkaitan dengan pengguna , kemudian gelung melalui nilai, cipta model jenama, kemudian "saveMany"...tetapi saya nampaknya mendapat konflik kekangan apabila menambah...saya tertanya-tanya jika ada cara yang lebih baik untuk melakukan ini < /p>
<p>Model <kod>Pengguna</kod> saya mempunyai yang berikut;</p>
<pre class="brush:php;toolbar:false;">jenama fungsi awam()
{
return $this->hasMany('Brands::class');
}
</pra>
<p>Kemudian dalam pengawal saya, saya mempunyai kod berikut untuk mengemas kini jenama;</p>
<pre class="brush:php;toolbar:false;">$user->brands()->delete();
foreach ($request['brands'] sebagai $brand) {
$brandArray[] = Jenama baharu([
'name' => $brand['name'],
'rating' => $brand['rating'],
]);
}
!empty($brandArray) && $user->brands()->saveMany($brandArray);
</pra>
<p>Adakah cara yang lebih baik? </p>
Mari kita pecahkan perkara kepada tiga bahagian:
# Pelanggaran kunci kekangan:
Jika anda menambahkan kekangan kunci asing pada jadual lain dan perlu memadamkan jenama, anda juga harus memadamkan semua data berkaitan yang dikekang oleh kunci asing.
#Reka Bentuk
Jika data berkaitan jenama tidak dapat dibuang, maka mungkin kita boleh pertimbangkan jika ada reka bentuk yang lebih baik. Mungkin kita boleh menambah cangkuk pada bahagian hadapan yang memanggil API DELETE setiap kali pengguna memadamkan beberapa data.
# Pertanyaan
Jika jenama mempunyai beberapa kunci unik, anda boleh menggunakan
upsert
dan bukannya saveMany. Ini akan menjadi lebih cekap.#kesimpulan
Saya syorkan pemadaman jenama melalui cangkuk pada bahagian hadapan apabila pengguna memadamkannya, dan gunakan
upsert
来处理创建和更新
untuk mengendalikanmembuat dan mengemas kini
kandungan