návrh modelů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kybermonty
Člen | 10
+
0
-

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
+
0
-

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
+
0
-

Ř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.

Tomik
Nette Evangelist | 485
+
0
-

Já bych se řídil závislostmi. Chci-li najít všechny studenty pracující na určitém projektu (určitých projektech), pak do objektu Projects. Chci-li najít projekty z nějakému (nějakým) studentům, pak do objektu Students.