Predanie parametra do basemodelu
- Reziw
- Člen | 22
Ahojte,
napadol ma jeden nápad ale neviem či je možné ho realizovať. Kedže využívam MVP mám na každú jednu logickú časť stránky vlastný presenter a model. Mám napríklad model na Novinky lenže využívam v nej dve až viac tabuliek. Lenže v modeli na Uživateľov mám rovnaké dotazy na DB len v inej tabuľke. Premýšlal som že by som vytvoril jednu metodu napríklad getAll ktorá by mala ako parameter meno tabuľky. Ale to mi príde ako hlúpost a určite by sa našiel spôsob ako to spraviť lepšie … Máte niekto nejaky nápad ?
- Martk
- Člen | 661
abstract class BaseModel {
protected $context;
abstract protected function getTableName();
public function getAll() {
return $this->context->table($this->getTableName())->fetchAll();
}
}
Model:
class News extends BaseModel {
const TABLE_NAME = 'news';
protected function getTableName() {
return self::TABLE_NAME;
}
}
Editoval Antik (29. 6. 2016 13:16)
- Reziw
- Člen | 22
Práve si pozerám detailnejšie MVP a zaujímalo b ma či to platí aj pre presenter. Ide o to že v NewsPresenter riešim aj kategorie noviniek a teda som to preniesol aj do modelu na 2 tabuľk teda novinky a ich kategorie. Teraz si len nie som istý či pre tie kategorie vytvoriť aj zvlásť presenter alebo stačí Model aby to bolo správne
- newPOPE
- Člen | 648
Rozdělit to na více modelů, model by měl být zodpovědný právě za jednu tabulku.
toto je blbost. Model moze kludne operovat nad viacerymi tabulkami, uloziskami, …
@Reziw osobne by som siel cestou kde si predam/injektem storage (v tvojom pripade pripojenie k DB) do modelu a tam si ho pouzivam ako uznam za vhodne (1, 2, X tabuliek).
class MyModel {
private $database;
function __construct(\Nette\Database\Context $database) {
$this->database = $database;
}
// tu uz si napisem veci ako presne potrebujem
}
EDIT:
Co sa tyka zdielania funkcionality (to su tie dotazy ktore sa ti opakuju) tak
ano da sa ist cestou MyModel extends BaseModel
alebo pouzit traity
ktore mi tu pasuju z hladiska skladania funkcionality viac ako dedenie.
Editoval newPOPE (29. 6. 2016 13:46)
- Reziw
- Člen | 22
@newPOPE Presne niečo také som skúšal ale neviem ako predať do metody názov tabuľky z iného modelu .. Teda jeden by som zvládol ale ked je ich viac už je problém
<?php
namespace App\Model;
use Nette\Database\Context;
use Nette\Object;
/**
* Class BaseManager
* @package App\Model
* Hlavná modelova logika pre prácu s databázov
*/
class BaseManager extends Object
{
/** @var Context */
protected $database;
/**
* BaseManager constructor.
* @param Context $database
*/
public function __construct(Context $database)
{
$this->database = $database;
}
public function getAll(){
$this->database->table(???);
}
}
@CZechBoY Mohol by si mi o tých moduloch povedať viac ? Prípadne nejaky zaujímavy link kde sa venuju tejto problematike
- Barvoj
- Člen | 60
CZechBoY napsal(a):
V případě zapisovacích operací je to trochu složitější a asi je lepší to řešit událostma.
Jak to myslíš událostma? :) Jako že bych měl pro každou tabulku model a každý model by pak poslouchal třeba na několika formulářích a zpracovával by si vždy tu část formuláře, která ho zajímá?
- CZechBoY
- Člen | 3608
@Barvoj Klidně bych to tak i udělal, ale musely by se pohlídat
výjimky.
@Reziw
https://doc.nette.org/…n/presenters#…
https://doc.nette.org/…n/presenters#…
http://blog.jsifalda.name/…instalator-3
Editoval CZechBoY (29. 6. 2016 14:37)