Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kuinka SyncwithoutDetaching -kahva -kopioiden tunnukset


Kuinka SyncwithoutDetaching -kahva -kopioiden tunnukset


Laravelissa "SyncwithoutDetaching" -menetelmä on suunniteltu lisäämään uusia suhteita moniin moniin kääntötaulukkoon poistamatta olemassa olevia. Kun se käsittelee kaksoiskappaleita, tässä on yksityiskohtainen selitys:

- Kun soitat "SyncwithoutDetaching" -sovelluksella IDS -joukkoon, Laravel kiinnittää vain ne tunnukset, joita ei ole jo läsnä kyseisen suhteen pivot -taulukossa. Se ei poista olemassa olevia suhteita, toisin kuin standardi "synkronointi" -menetelmä, joka irrottaa kaikki tunnukset, jotka eivät ole toimitetussa taulukossa [1] [5] [6].

- "SyncwithoutDetaching" -sarja ei kuitenkaan estä luonnostaan ​​kaksoiskappaleita, jos niveltaulukko tai sovelluslogiikka sallii ne. Jos kääntötaulukossa ei ole ainutlaatuista rajoitusta vieraiden avaimien yhdistelmälle, on mahdollista, että kaksoiskappaleet lisätään, jos menetelmää kutsutaan väärin tai jos tietokantakaavio sallii sen [3] [7] [8].

- Kopioiden välttämiseksi on suositeltavaa valvoa ainutlaatuinen komposiittiavain niveltaulukon sarakkeissa (esim. Kaksi ulkomaista avainsarakketta) tietokantatasolla. Tämä varmistaa, että yritykset lisätä kaksoiskappaleet epäonnistuvat, ja voit käsitellä tällaisia ​​poikkeuksia hakemuksessasi [8].

- Sisäisesti `syncwithoutdetaching` toimii kutsumalla" synkronointi "-menetelmää toisella parametrilla, joka on asetettu" false ", mikä tarkoittaa" älä irrota ". Tämä saa sen lisäämään uusia merkintöjä poistamatta olemassa olevia. Se tarkistaa olemassa olevat tunnukset ja lisää vain puuttuvat, joten se tyypillisesti estää kopioiden lisäämisen itse toiminnan aikana, jos syöttöryhmä ei sisällä kopioita [1] [6].

- Jos kaksoiskappaleet ovat edelleen ilmestyneet, se johtuu usein joko:
- Syöttöryhmä, joka sisältää kaksoiskappaleet.
- Tietokantatason rajoitusten puute.
- käyttämällä `kiinnitä ()` `synkronointialueiden ()" sijasta ", koska" kiinnitä () "lisää aina uusia rivejä olemassa olevista rivistä riippumatta, mikä aiheuttaa kaksoiskappaleita [6] [7].

Yhteenvetona voidaan todeta, että "SyncwithoutDetaching" välttää kaksoissuhteiden lisäämistä sen toiminnan aikana kiinnittämällä vain ID: t, jotka eivät ole jo toisiinsa liittyviä, mutta se perustuu asianmukaisiin syöttö- ja tietokantarajoitteisiin kopioiden täysin estämiseksi. Ainutlaatuisen hakemiston lisääminen kääntötaulukkoon on paras käytäntö varmistaa, että kaksoiskappaleet eivät voi olla. Jos kopioita esiintyy, se osoittaa yleensä puuttuvat rajoitukset tai siihen liittyvien menetelmien, kuten `kiinnittämisen", virheellinen käyttö.

Tämä menetelmä on erityisen hyödyllinen, kun haluat lisätä suhteita vaikuttamatta olemassa oleviin suhteisiin ja vaarantamatta kaksoismerkintöjä, jos niitä käytetään oikein asianmukaisella tietokannan suunnittelulla.

Viittaukset:
.
.
[3] https://github.com/laravel/framework/issues/21639
[4] https://laracasts.com/discuss/channels/eloquent/belongstomanany-and-wanted-dulicates
[5] https://serversideup.net/managing-pivot-data-with-laravel-eloquent/
.
[7] https://www.youtube.com/watch?v=dcrisowswti
[8] https://github.com/laravel/framework/issues/14270