Aktuální uživatel v modelu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- HosekPetr
 - Člen | 31
 
Dobrý den,
mám tu takovýto databázový model a každá tabulka, kterou mám v databázi má sloupeček user_id podle kterého z ní potřebuji tahat data, jak se prosím dostanu k aktuálně přihlášenému uživateli, abych podle toho mohl filtrovat data z tabulky?
Předem moc děkuji za odpovědi! :-)
Mějte se a smějte se! :-)
Petr Hošek
use Nette\Security as NS,
	Nette\Database\Connection,
	Nette\Object;
class Database extends Object
{
	/**
	 * Spojení s databází
	 */
	public $database;
	public function __construct(Connection $database)
    	{
        	$this->database = $database;
    	}
	public function $table() {
		return $this->database->table('table')->where('user_id', ???);
	}
}
				
- HosekPetr
 - Člen | 31
 
@Melmen Ne tak docela! Díky tomu, že třída dědí od Object, není k tomu takto lehce přístup!
Otázka pro zkušenejší zní: „Neprzním“ tím nějak nette a myšlenku MVC?
Děkuji všem! :-)
use Nette\Environment,
	Nette\Database\Connection,
	Nette\Object;
class Database extends Object
{
	/**
	 * Spojení s databází
	 */
	public $database;
	private $user;
	private $userId;
	public function __construct(Connection $database)
    	{
        	$this->database = $database;
        	$this->user = Environment::getUser();
        	if ($this->user->isLoggedIn()) {
        		$this->userId = $this->user->getIdentity()->getId();
        	} else {
        		$this->userId = null;
        	}
    	}
	public function table() {
		return $this->database->table('table')->where('user_id', $this->userId);
	}
}
				
- Melmen
 - Člen | 132
 
A co když to upravíš takhle nějak?
public function table($userId = NULL) {
                if($userId){
		return $this->database->table('table')->where('user_id', $userId);
        }
.....atd..
		}
A pak v presenteru doplníš UserId…
Akorát se mi to nelíbí, nebylo by lepší v presenteru něco na způsob
$this->db->table('tabulka')->where('user_id', $this->getUser()->getId());
???

- Ascaria
 - Člen | 187
 
Můj postup, který mě jednou napadl a používám ho je následující:
<?php
    private $inTransaction;
    /**
     * Uživatel, který insertuje či edituje facilitu
     * @var \Nette\Http\User
     */
    private $user = null;
    /**
     * Iniciuje vkládání zařízení do databáze
     * @param \Nette\Http\User $user Uživatel který akci provádí
     */
    public function TransactionBegin(\Nette\Http\User $user)
        {
        $this->user = $user;
        $this->inTransaction = true;
        $this->connection->begin();
        }
    /**
     * Ukončí vkládání zařízení do databáze
     */
    public function TransactionCommit()
        {
        $this->user = null;
        $this->inTransaction = false;
        $this->connection->commit();
        }
    /**
     * Rollbackne vkládání zařízení do databáze
     */
    public function TransactionRollback()
        {
        $this->user = null;
        $this->inTransaction = false;
        $this->connection->rollback();
        }
    /**
     * Uloží facilitu do databáze
     * @param Int|Null $facility_parent
     * @param Array $data
     * @return Int ID vytvořeného záznamu
     */
    public function InsertFacility($facility_parent, Array $data)
        {
        if(!$this->inTransaction)
            throw new \Nette\InvalidStateException('Not in transaction, use TransactionBegin first.');
        // Doplníme data...
        // Vložíme facilitu do databáze ...
        // Vrátíme auto_increment id
        return $this->connection->insertId;
        }
?>