Penso di aver capito l'idea alla base della mappatura degli oggetti, ma c'è una lacuna nella mia base di conoscenze che spero di riempire ora. Per prima cosa lascia che ti dica cosa ho capito da tutta la faccenda.
Ho le mie tabelle del database a posto, e per ogni tabella ho una classe separata. Ogni istanza di ogni classe rappresenta una riga della tabella, ad esempio gli utenti della tabella: id, nome, password dovrebbero essere rappresentati come
class User {
protected $id;
protected $name;
protected $password;
}
Che avrebbe metodi come setName, setPassword, create, save, getById
e così via. Tutto questo ha molto senso per me e apporta un ottimo aspetto al codice oltre alla manutenibilità, è semplicemente fantastico, mi sono innamorato di questo modello di gestione dei dati da quando l'ho scoperto.
Tuttavia, ora voglio la cosa che non mi è chiara. Se ho una tabella che è una tabella di connessione, scusa, non so davvero quale sia il termine per questo - una tabella che mostra la connessione tra altre tabelle, come faccio a manipolare quella tabella? Lasciatemi fare un esempio perché non sono molto bravo con le spiegazioni. Supponiamo di aggiungere una tabella in cui gli utenti possano aggiungere i propri contatti, in modo semplice e semplice, niente di eccezionale per l'esempio. Nella tabella contatti gli utenti possono aggiungere altri utenti come segnalibri. Dato che quella tabella non avrebbe un PK, o probabilmente avrebbe un PK complesso, non si adatta molto bene al metodo sopra - 1 riga = 1 istanza, perché non c'è proprio modo di impostare il "contatto" oggetto nel modello mostrato sopra. Sì, potrei probabilmente fare qualcosa di simile
class Contact {
protected $forUser;
protected $contact;
}
Dove forUser
sarebbe l'utente che è il contatto e contact
sarebbe l'utente effettivo che il contatto contiene, ma come ho detto, non è molto bello e non ha perfettamente senso per me.
Il metodo che ho imparato è quello di avere metodi aggiuntivi nella classe iniziale stessa che gestiscono le tabelle di "connessione", qualcosa come
class User {
...
public function addContact(\User $user){
...
}
}
Potresti darmi qualche consiglio e dirmi quali sono le buone e cattive pratiche in materia?