Předání připojení k DB do modelu
- sejmor
- Člen | 63
Jsem asi už slepej:
Mám model který mi má vracet obecný SQL dotaz:
class Dotaz extends Nette\Object {
public $database;
public function __construct(Nette\Database\Connection $database)
{
$this->database = $database;
}
public static function get_query($sql)
{
return($this->database->query($sql));
}
}
V config neon mám:
dotaz:
class: Dotaz(@database)
V presenteru ho volám:
$this->context->dotaz->get_query('select * from category ...');
Vrátí mi to: Using $this when not in object
Asi bych i pochopil, že objekt není vytvořen. Když v model proměnou $database udělám statickou a nepoužiji $this ale self tak to funguje. Když si udělám base model, dám ho do configu, a dědím z něj proměnou $database tak to taky funguje. Jenom mi není jasný proč ve spoustě podobných dotazů zde na fóru mají výše uvedené řešení a asi jim tedy funguje.
Tak by mě vlastně jenom zajímalo, které řešení je nejlepší.
- ViPEr*CZ*
- Člen | 817
Proměnnou database bych udělal private, aby nebyla vidět zvenčí. V config.neon pokud máte jediné připojení k DB, tak nemusíte uvádět jako parametr, on se tam dostane tzv. autowiringem.
dotaz:
class: Dotaz
Toto bude stačit. No a todle tfuj… public static function get_query($sql) to by mělo být public function get_query($sql)!
Editoval ViPEr*CZ* (6. 8. 2012 18:17)