O trasatura pentru modelele Laravel Eloquent care va permite sa clonati un model si relatiile sale, inclusiv fisiere. Chiar si catre o alta baza de date.

Instalare

Pentru a incepe cu Cloner, utilizati Composer pentru a adauga pachetul la dependentele proiectului dvs.:

compozitor necesita bkwld / cloner

Nota: Pasul de mai jos este optional in Laravel 5.5 sau mai sus!

Dupa instalarea pachetului de clonare, inregistrati furnizorul de servicii.

Bkwld \ Cloner \ ServiceProvider :: class,

in fisierul de configurare config / app.php:

‘providers’ => [/ * * Furnizori de servicii de pachete … * / Bkwld \ Cloner \ ServiceProvider :: class,],

Utilizare

Modelul dvs. ar trebui sa arate acum:

class Articolul extinde Elocvent {use \ Bkwld \ Cloner \ Cloneable; }

Puteti clona un model de articol astfel:

$ clone = Article :: first () -> duplicate ();

In acest exemplu, $ clone este un nou articol care a fost salvat in baza de date. Pentru a clona pe o alta baza de date:

$ clone = Article :: first () -> duplicateTo (‘productie’);

In cazul in care productia este numele conexiunii unei conexiuni de baze de date Laravel diferite.

Relatii de clonare

Sa spunem ca articolul dvs. are multe fotografii (o relatie de la unul la mai multi) si poate avea mai multi autori (o relatie de la multi la multi). Acum, modelul articolului dvs. ar trebui sa arate astfel:

class Articolul extinde Elocvent {use \ Bkwld \ Cloner \ Cloneable; protejat $ cloneable_relations = [‘fotografii’, ‘autori’]; fotografii cu functie publica () {return $ this-> hasMany (‘Photo’); } autori de functii publice () {return $ this-> belongToMany (‘Author’); }}

$ Cloneable_relations il informeaza pe Cloneable cu privire la ce relatii ar trebui sa urmeze atunci cand cloneaza. Acum, cand apelati articolul :: first () -> duplicate (), toate randurile Photo ale originalului vor fi copiate si asociate cu noul articol. Si vor fi create noi randuri pivot care asociaza noul articol cu ​​autorii originalului (deoarece este o relatie intre multi, nu sunt create randuri noi de autor).

porno viola a su madre your porn
maduras folladoras videos de zofilia gratis
maduras sensuales trio bisex
videos porno trios español porno español jovencitas
abuelas follando mi madre me folla
vidio xxxx descargar pelis pornos
sexo guarro matrimonios follando
abuelas folladas por el culo follando en español
monjas lesvianas follada en la playa
incesto abuela nieto porno online gratis
porno rspañol gitanas follando
porno esp videos xxx gratis español
corridas anales porno estremo
putasfollando video famosas desnudas
porno madres peludas videos sexo español
maduras españolas amater videos pornos caseros reales
corriendose dentro sexo videos gratis
peludas porno follada a traicion
pono gay chantaje y lujuria
follando en el parque abuelas incestos

In plus, daca modelul Photo are multe alte modele, puteti specifica $ cloneable_relations in clasa sa, iar Cloner le va continua sa le reproduca.

Nota: Multe pana la multe relatii nu vor fi clonate intr-o baza de date diferita, deoarece instanta aferenta nu poate exista in cealalta baza de date sau ar putea avea o cheie primara diferita.

Personalizarea atributelor clonate

In mod implicit, Cloner nu copiaza campul id (sau orice ai definit ca cheie pentru model); presupune ca o noua valoare va fi incrementata automat. De asemenea, nu copiaza created_at sau updated_at. Puteti adauga atribute suplimentare de ignorat dupa cum urmeaza:

clasa Foto extinde Elocvent {use \ Bkwld \ Cloner \ Cloneable; protejat $ clone_exempt_attributes = [‘uid’, ‘source’]; articol de functie publica () {return $ this-> belongTo (‘Article’); } functie publica onCloning ($ src, $ child = null) {$ this-> uid = str_random (); daca ($ copil) ecou „Acest lucru a fost clonat ca o relatie!”; echo ‘Cheia originala este:’. $ src-> getKey (); }}

$ Clone_exempt_attributes se adauga valorilor implicite. Daca doriti sa inlocuiti valorile implicite, anulati metoda getCloneExemptAttributes () a trasaturii si returnati o matrice.

De asemenea, retineti metoda onCloning () in exemplu. Este folosit pentru a va asigura ca o coloana unica ramane unica. Trasatura clonabila se adauga apelurilor de apel fara operatii care sunt apelate imediat inainte ca un model sa fie salvat in timpul unei duplicari si imediat dupa: onCloning () si onCloned (). Parametrul $ child va permite sa personalizati comportamentul in functie de daca este clonat ca relatie sau direct.

In plus, Cloner declanseaza urmatoarele evenimente Laravel in timpul clonarii:

  • clonare :: clonare: ModelClass
  • cloner :: clonat: ModelClass

ModelClass este calea de clasa a modelului care este clonat. Sarcina utila a evenimentului contine clona si instantele modelului original.

Clonarea fisierelor

Daca modelul dvs. face referire la fisiere pe discul salvat, probabil ca veti dori sa duplicati aceste fisiere si sa actualizati referintele. In caz contrar, daca clona este stearsa si se sterge in cascada, veti sterge fisierele la care face referire modelul original. Cloner va permite sa specificati un adaptor de atasare a fisierului si este livrat cu suport pentru Bkwld \ Upchuck. Iata cateva exemple de utilizare:

clasa Foto extinde Elocvent {use \ Bkwld \ Cloner \ Cloneable; protejat $ cloneable_file_attributes = [‘imagine’]; articol de functie publica () {return $ this-> belongTo (‘Article’); }}

Proprietatea $ cloneable_file_attributes este utilizata de trasatura Cloneable pentru a identifica coloanele care contin fisiere. Valorile lor sunt transmise adaptorului atasament, care este responsabil pentru duplicarea fisierelor si returnarea caii catre noul fisier.

Daca nu utilizati Bkwld \ Upchuck, puteti scrie propria dvs. implementare a trasaturii Bkwld \ Cloner \ AttachmentAdapter si o puteti infasura intr-un container Laravel IoC numit „cloner.attachment-adapter”. De exemplu, introduceti acest lucru in aplicatia / start / global.php:

App :: singleton (‘cloner.attachment-adapter’, functie ($ app) {returneaza noul CustomAttachmentAdapter;});