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;
}
?>