logování změn databáze do tabulky žurnálu na úrovni modelu

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

Zdravím,
je nějaká cesta, jak z jednoho modelu volat model druhý? Mám aplikaci a chci tam dodělat k některým operacím žurnál. Zatím jsem uvažoval, že bych příslušné metody modelů dovybavil voláním modelu žurnálu, zhruba takto:

class Rok extends Table {
		protected $tableName = 'rok';

	public function createRok ($o_rok, $editor) {
		$return = $this->getTable()->insert(array( ... ));
		$this->context->journal->insert(table'=>$tableName, 'report'=>json_encode($o_rok), 'user_id'=>$editor));
}

Takto to ale nejde a zatím mě nenapadlo, co s tím. Děkuji za každou radu.

Mysteria
Člen | 797
+
0
-

Proč by to nešlo?

class Model1 {
	/** @var \Model2 */
	private $model2;

	public __constructor(\Model2 $model2) {
		$this->model2 = $model2;
	}

	public function something() {
		$this->model2->somethingElse();
	}
}
MartinitCZ
Člen | 580
+
+2
-

Ve správném návrhu by jedenModel neměl vědět o druhyModel. ;)
Zkus kouknout na Kdyby\Events
Možná je to to, co hledáš. ;)

Pavel Macháň
Člen | 282
+
0
-

jik napsal(a):

Zdravím,
je nějaká cesta, jak z jednoho modelu volat model druhý? Mám aplikaci a chci tam dodělat k některým operacím žurnál. Zatím jsem uvažoval, že bych příslušné metody modelů dovybavil voláním modelu žurnálu, zhruba takto:

class Rok extends Table {
		protected $tableName = 'rok';

	public function createRok ($o_rok, $editor) {
		$return = $this->getTable()->insert(array( ... ));
		$this->context->journal->insert(table'=>$tableName, 'report'=>json_encode($o_rok), 'user_id'=>$editor));
}

Takto to ale nejde a zatím mě nenapadlo, co s tím. Děkuji za každou radu.

Udělej si fasádu pro potřebnou akci a po akci modelu1 udelas i akci modelu2 a v presenteru zavolas proste metodu z té fasady

a nebo Kdyby\Events viz @MartinitCZ