
Originariamente inviata da
artex
La soluzione 2 che tu indichi potrebbe essere corretta?
person
id | nome | cognome | eta
worker
id| pid | data_assunzione | qualifica
In questo caso come imposteresti i metodi?
Grazie per la pazienza
Il problema di questo approccio è che se vuoi distinguere i diversi "tipi" di pesona dovrai aggiungere dei flag sulla tabella
es
person
id | nome | cognome | eta | isWorker | isFreelance
worker
id| pid | data_assunzione | qualifica
freelance
id| pid | data_contratto | mansione
in questo modo faciliti la selezione delle persone ma avrai tanti flags quanti "tipi" di persona presenti nel tuo sistema. Qui puoi gestire tutto con una classe
Io invece a livello di tabelle opterei per:
user
id | nome | mail | password | data_registrazione
impiegato
id | nome | mail | password | data_registrazione | data_assunzione | mansioni
nonostante la ripetizione di alcuni campi in questo modo sei aggevolato a livello di codice e puoi tenere nettamente separati i due tipi di persone.
a livello di codice
Codice PHP:
abstract class person {
protected $fields = array();
protected $table;
protected $pdo;
public function __construct( PDO $pdo ) {
$this->pdo = $pdo;
}
// magic method __setter e __getter
// metodi c.r.u.d comuni
// metodi per login e logout
}
class user extends person {
protected $fields = array( 'id', 'nome', 'mail', 'password', 'data_registrazione' );
protected $table = 'user';
//metodo specifico
public function fetchByName( $name ) {
$selectQuery = "SELECT * FROM $this->table WHERE name = :name LIMIT 0,1";
$stmt = $this->pdo->prepare( $selectQuery );
// ect ect
return $userByName;
}
}
class employee extends person {
protected $fields = array( 'id', 'nome', 'mail', 'password', 'data_registrazione', 'data_assunzione', 'mansioni' );
protected $table = 'impiegato';
private $msg;
//metodo specifico
public function fetchMansioni( $id ) {
$selectQuery = "SELECT mansioni FROM $this->table WHERE id = :id LIMIT 0,1";
$stmt = $this->pdo->prepare( $selectQuery );
// ect ect
return $mansioni;
}
public function closeOrder( $oid ) {
$query = "UPDATE orders SET closed = 1 WHERE id = :id";
if ( $this->pdo->execute( $query ) ) {
$this->msg = "ordine chiuso";
}
}
public function getMsg() {
return $this->msg;
}
}
Come vedi in questo modo puoi distinguere nettamente le due persone e fargli compiere funzioni diverse.. questo è solo uno dei tanti modi per risolvere il tuo problema..