návrh modelů
- kybermonty
- Člen | 10
Zdravím,
řeším diplomovou práci v Nette a dumám nad tím, jak nejelegantněji vyřešit přístup k databázi. Zatím jsem došel k tomu, že každá tabulka v databázi by měla být reprezentována modelem → třídou, která obsahuje různé metody pro práci s daty, asi nějak takto:
class Students extends Object
{
private $table = 'students';
public function findAllExcellent()
{
return $this->connection->select('*')->from($this->table)->where('average < 1.5');
}
}
a v presenteru získávám data následovně:
public function renderShowStudents()
{
$students = new Students();
$this->template->students = $students->findAllExcellent();
}
Ale potřeboval bych vyřešit jak dělat dotazy přes více tabulek –
resp. do jakých modelů umisťovat metody pracující s více
tabulkami, abych se v tom později vyznal.
Např. chci získat všechny studenty, kteří pracují na projektu A – mám
umístit metodu vracející tyto studenty do modelu Students nebo do Projects ?
Zajímalo by mě podle jakého klíče tuto logiku navrhujete.
A jen tak na okraj – asi by bylo vhodné, aby všechny modely dědily např. z BaseModel, který bude obsahovat všechny jednoduché a opakující se metody – findAll, insert, update, delete.
Moc děkuji za každou radu.
- bazo
- Člen | 620
kybermonty napsal(a):
Např. chci získat všechny studenty, kteří pracují na projektu A – mám umístit metodu vracející tyto studenty do modelu Students nebo do Projects ? Zajímalo by mě podle jakého klíče tuto logiku navrhujete.
ja by som dal do modelu students metodu findStudentProjects($student) a do modelu project findProjectStudents($project)
- Klokan
- Člen | 47
Řešení bývá většinou intuitivní. Přijdeš na to praxí. Výběry se umísťují do tabulky se kterou pracuješ jako „hlavní“. Tj. když chci v projektu vědět, kolik na tom dělá studentů, tak to umístím do projektu. Když chci vědět na kterých projektech student dělá, tak to umístím do studenta.