Jak dostat připojení do modelu se statickými metodami a Nette\DB
- David Klouček
- Člen | 57
V tuhle chvíli mám (funkční) následující model:
//PostsModel.php
class PostsModel extends Nette\Object
{
public $db;
public function __construct(Nette\Database\Connection $db)
{
$this->db = $db;
}
public function fetchSingleBySlug($slug)
{
return $this->db->table('posts')->where('slug', $slug)->limit(1)->select('*')->fetch();
}
//další metody
}
V presenteru dostanu model pomocí getService() do proměnný a pak metody
volam operátorem ->
. Já bych ale chtěl mít metody statický
jako tady.
Jenže jak dostanu připojení k DB pro Nette\Database do toho modelu?
Editoval David Klouček (25. 8. 2012 19:34)
- pg
- Člen | 8
V uvedeném tutoriálu je pro práci s databází používáno dibi, které
umožňuje statické volání (př. dibi::query()
). A díky tomu
se nemusí modelu předávat instance dibi.
Řekl bych, že s Nette\Database to nepůjde – ale možná se mýlím, s Nette\Database nepracuji.
Editoval pg (25. 8. 2012 21:07)
- Filip Procházka
- Moderator | 4668
Ne, nechceš statické metody. A jestli ti někdo poradí jak to udělat, půjde klečet do kouta a dostane čapku s nápisem „ostuda“.
Ten tutorial je zastaralý, měl by se přepsat.
Editoval HosipLan (25. 8. 2012 21:51)
- Kaiz
- Člen | 25
Dobrý den, mohli by jste mi někdo vyvrátit proč je špatný nápad mít statické metody?
Přijde mi to vhodné řešení pro situace stylu
<?php
Class Člověk {
private $id;
public function __construct($id){
$this->id = $id;
}
public static function getByMail($mail){
// tady ho najdu a získám si ID
return new Člověk($nalezeneId);
}
}
?>
V tomhle mi vyhovuje Dibi s Dibi::query, protože netuším jak bych psal modely tohoto typu bez neustálého posílání si v proměnné připojení k DB
- David Matějka
- Moderator | 6445
Kaiz:
https://doc.nette.org/…introduction
a hledej ‚zlo‘ :)
jednoduse receno – tridy by mely jasne definovat svoje zavislosti a ne je cucat z prstu :)
v tvem pripade bys mel tridu (v nette nejlepe registrovanou jako sluzbu)
ClovekRepository
, ktera by jako zavislost mela pripojeni
k databazi a ty bys nad instanci repository zavolal nestatickou metodu
getByMail a ta by provedla dotaz nad pripojenim a vratila naplnenou instanci
Cloveka