- Stefanescu Mihai a postat in Paginare in PHP
- johhny a postat in Paginare in PHP
- Stefanescu Mihai a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- madalin a postat in Cum pot afisa eroarea cand utilizatorul a scris un username gresit sau o parola gresita?
- Stefanescu Mihai a postat in Featureuri site
Association table mapping design pattern in PHP
Acest pattern, association table mapping este un mod de a crea o relatie de tip many-to-many intre entitatile unei baze de date. Se foloseste in momentul in care ai 2 entitati intre care trebuie sa existe o relatie de tip many-to-many. In loc sa adaugam mai multe coloane pentru cele 2 entitati, facem o tabela noua care sa se ocupe de aceasta asociere.
Hai sa vedem cum ar putea functiona acest pattern.
- Sa pesupunem ca avem 2 entitati, "users" si "groups", fiecare user poate fi in mai multe grupuri, iar fiecare grup poate avea mai multi useri.
- In loc sa adaugam coloana group_id pe tabela users si o coloana user_id pe tabela de groups, o sa facem o tabela noua numita user_group.
- Tabela user_group va avea 2 campuri, user_id si group_id.
- Fiecare rand din tabela user_group reprezinta o singura asociere intre un user si un grup.
- De exemplu, daca user-ul cu id-ul 1 este un grupul cu id-ul 1 si in grupul cu id-ul 2, in tabela user_group o sa avem 2 inregistrari (1,1) si (1,2)
Acest design pattern iti permite sa creezi, citesti, modifici si stergi usor asocierile many-to-many, de asemenea, poti adauga si extra informatii legate de asociere, cum ar fi data creeri asocierii sau un rol al user-ului in grup.
De asemenea, ce este important de retinut este faptul ca folosind acest pattern vei fi nevoit sa te folosesti de un JOIN in query-ul de SQL pentru a scoate asocierea.
Mai jos am sa explic un exemplu al acestui pattern in PHP folosind PDO (PHP Data Objects) pentru a interactiona cu baza de date MySQL.
Care sunt pasii pe care trebuie sa ii urmam?
1. Facem o tabela noua de asociere a celor 2 entitati, precum user_group cu coloanele user_id si group_id
2. Pentru a adauga o noua asociere facem un insert cu asociere folosindu-ne de ID-urile din cele 2 entitati
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'password'); $stmt = $pdo->prepare("INSERT INTO user_group (user_id, group_id) VALUES (:user_id, :group_id)"); $stmt->execute(['user_id' => 1, 'group_id' => 2]);
3. Pentru a prelua toate asocierile unui anumit user sau unui anumit grup trebuie sa facem un select pe tabela de asociere cu JOIN pe tabela de asociere
$stmt = $pdo->prepare("SELECT * FROM user_group JOIN groups ON user_group.group_id = groups.id WHERE user_id = :user_id"); $stmt->execute(['user_id' => 1]); $groups = $stmt->fetchAll();
4. Pentru a sterge o asociere, trebuie sa stergi inregistrarea din tabela de asocieri ce corespunde datelor dorite, atat din prima tabela, cat si din a doua.
$stmt = $pdo->prepare("DELETE FROM user_group WHERE user_id = :user_id AND group_id = :group_id"); $stmt->execute(['user_id' => 1, 'group_id' => 2]);
Acest exemplu al design pattern-ului association table mapping este unul simplist, el poate fi modificat conform necesitatii voastre de implementare.
Comentarii
Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!