Opakovane nacitani dat z DB

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

Zdravim mam problem s tim, ze mam tridu Team, kde si zjistuji informace o tymu, mimo jine podle uzivatele zjistuji i team_id z DB. A tuto metodu pak volam z ruznych casti aplikace. Problem je ale v tom, ze pri kazdem zadani se mi vzdy data tahaji z DB. Da se to nak vyresit aby se to nacetlo jednou a pak uz se to tahalo jen z pameti?

team

class TeamModel extends Object {

    /** @var \Nette\Database\Connection */
    private $database;

    /** @var Nette\Security\User */
    private $user;

    /**
     * @param Nette\Database\Connection $database
     * @param Nette\Security\User $langModel $user
     */
    public function __construct(\Nette\Database\Connection $database, \Nette\Security\User $user) {
        $this->database = $database;
        $this->user = $user;
    }


    /**
     * Podle uzivatele vrati id tymu
     * @return int $tym_id
     */
    public function getTym_id() {
        return $this->database->table('tym')->where('uzivatel_id', $this->user->id)->fetch()->id;
    }

volani:

class Foo extends Object {

    /** @var \Nette\Database\Connection */
    private $database;

    /** @var Nette\Security\User */
    private $team;

    /**
     * @param Nette\Database\Connection $database
     * @param Nette\Security\User $langModel $user
     */
    public function __construct(\Nette\Database\Connection $database, \TeamModel $team) {
        $this->database = $database;
        $this->team = $team;
    }

    public function neco() {
	$data = $this->team->tym_id;
    }
Caine
Člen | 216
+
0
-

Třeba tak..

public function getTym_id() {
	static $id;
    return $id ?: $id = $this->database->table('tym')->where('uzivatel_id', $this->user->id)->fetch()->id;
}
saimons
Člen | 293
+
0
-

Diky, to je presne ono, jsem o tom nikdy neslysel.

Editoval saimons (23. 3. 2012 0:03)

llook
Člen | 407
+
0
-

Takhle bych to nedělal. Jestli to dobře chápu, tak může existovat víc instancí TeamModel. Ta static proměnná je ale pro všechny instance společná (viz), takže by všechny instance vracely stejné ID (to, které se načte jako první).

Udělal bych to radši takto:

private $id;

public function getTym_id() {
    return $this->id ?: $this->id = $this->database->table('tym')->where('uzivatel_id', $this->user->id)->fetch()->id;
}