Cum să lucrați cu conexiuni active de înregistrare în yii2 (relația de populație, link și t

O descriere normală a abordării, pe care nu am găsit-o niciodată (cu excepția notelor de aici). Citiți ghidul oficial al găurilor, dar metodele de scriere a modelelor similare din baza de date sunt descrise foarte puțin. citirea documentației Active Record nu a ajutat prea mult.







Și totuși vreau să înțeleg acest cod, cu această abordare, pentru a înțelege ce oportunități sunt încorporate în cadru, pentru a nu îngrădi grădina față de cea existentă.

Întrebări după cod:

  1. Cum funcționează setterii în acest exemplu? De unde se transmit valorile setatorilor ($ tags, $ cover, $ images.) Vino de la?
  2. La ce oră sunt scrise datele din modelele legate (etichete, imagini, imagine principală) în baza de date?
  3. Ce lipsește în acest cod pentru ca acesta să funcționeze?

În mod separat, aș dori să solicit referințe la depozitul de proiecte grave folosind Yii2. Aș dori să văd cele mai bune practici în proiecte reale complexe.

a fost văzută ultima dată la 19 noiembrie la ora 15:08

$ Post-> de încărcare (Yii :: $ app-> request-> post () efectuează modelul de încărcare. Yii :: $ app-> request-> post () returnează o matrice de forma [ 'MyFormName [tasta]' => ' valoarea]. sarcina pentru fiecare proprietate în modelul cu cheia nume este setat în cazul în care există reguli de validare sunt reguli, iar câmpul este scris în scenariu pentru ei.

getTags este o relais. Servește pentru comunicațiile modelului ActiveRecord. setTags arata ca un setter (setter, aceasta este o functie numita atunci cand accesati o proprietate inexistenta), dar in acest caz este doar o functie. Stochează modelul asociat folosind populateRelation și incrementează contorul curent $ this-> tags_count. Apropo de problema proprietăților publice, contorul poate fi mărit direct, fără a apela metoda setTags.

Cum funcționează setterii în acest exemplu? De unde se transmit valorile setatorilor ($ tags, $ cover, $ images.) Vino de la?

setCover. setTags. setImages sunt numite în interiorul modelului cu trecerea obișnuită a parametrilor. Cred că ar trebui să fie private și să nu fie apelate din codul clientului (controler).







La ce oră sunt scrise datele din modelele legate (etichete, imagini, imagine principală) în baza de date?

În momentul apelării populateRelation, releele asociate sunt populate în model. Salvarea are loc în controler în momentul salvării modelului.

Ce lipsește în acest cod pentru ca acesta să funcționeze?

Scrieți totul, folosind acest cod doar ca exemplu. Aveți nevoie de experiență și acest lucru vă va ajuta să vă gândiți la funcții precum setTagsString. care nu sunt folosite oriunde și introduc doar confuzii. De asemenea, va fi clar că pentru metoda getRelatedRecords trebuie să aveți tabele cu imagini și etichete.

Vă recomandăm să luați această secțiune a documentației și să activați fiecare funcție. Este un lung, toate eu nu am trecut încă, dar va obține o imagine cât mai completă a posibilităților cadrului ActiveRecord, fără a adâncit în codul de o calitate îndoielnică.

Nu uitați să facă o metodă de clasă derivată metoda de apel afterSave, după cum se specifică în documentația> Când prioritari această metodă, asigurați-vă că apelați la punerea în aplicare mamă, astfel încât evenimentul este declanșat. funcția publică afterSave ($ insert, $ changedAttributes)"- Vladimir Jucov 20 februarie '16 la 17:21

Cum funcționează setterii în acest exemplu? De unde se transmit valorile setatorilor ($ tags, $ cover, $ images.) Vino de la?

Aceasta este magia PHP. În clasa de bază, metodele __get și __set sunt suprascrise. care transformă citire-scriere atribute foo- $> bar = $ baz-> QWE în metoda de apeluri $ foo-> setBar ($ baz-> getQwe ()). Dacă magia nu-i place, atunci puteți apela direct metodele.

De fapt, aceștia sunt primiți și stabili banali. Unele limbi au proprietăți (getters și setters, unite într-o singură entitate), dar PHP nu le suportă.

La ce oră sunt scrise datele din modelele legate (etichete, imagini, imagine principală) în baza de date?

Când metoda de salvare este apelată din ActiveRecord. În acest moment, datele sunt validate și dacă validarea trece, atunci datele acestui ActiveRecord și toate datele conexe sunt înregistrate.

Ce lipsește în acest cod pentru ca acesta să funcționeze?

Această întrebare nu poate fi răspunsă până când nu spuneți ce nu funcționează.

În mod separat, aș dori să solicit referințe la depozitul de proiecte grave folosind Yii2. Aș dori să văd cele mai bune practici în proiecte reale complexe.

Ok. Înțeleg asta. Mă uit la controller și a vedea modul în care datele sunt încărcate de \ Yii :: $ app-> request-> bara () [ 'post'] în aceeași $ post. Totul este clar. Dar nu sunt sigur că acest lucru este suficient pentru ca modelele aferente să fie completate. În mod special interesant în acest sens este metoda setTagsString (), care este ca un setter, dar nu este ca un setter. Cel puțin în cazul meu, modelele aferente nu sunt ocupate. $ this-> getRelatedRecords () în beforeSeve () și afterSave () nu returnează nimic, de fapt magia nu se întâmplă. - Denis Khvorostin pe 19 noiembrie '03 la 4:17







Articole similare

Trimiteți-le prietenilor: