[ Crazy Man @ 23.10.2014. 09:15 ] @
Pozdrav, ljudi već neko vrijeme učim, pišem, razvijam vlastiti PHP MVC i malo sam zapeo, oko Modela tj. razdvajanje modela na Entity i Data Mapper. Entity bi sadržavao busines logiku modela, a Data Mapper samo čitanje, spremanje i brisanje u bazu, XML ili JSON recimo, znači logika mi ostaje ista a Mappere mijenjam i prilagođavam po potrebi. Taj dio sam čak i solidno razdvojio (ili barem mislim :D ) ali imam problem kada u Modelu imam relacije one-to-many, many-to-one. Npr. jedan blog post može biti u jednoj kategoriji, ali kategorija može sadržavati više blog postova. PostController.php - Čupanje jednog posta - ovaj dio je ok, bez problema dobijem prikaz jednog posta te parent kategorije ili kategorija ako ih ima više npr. vijesti/europa/hrvatska/naslov-posta/ Code: $postMapper = new PostMapper(); $post = $postMapper->load($id); echo $post->getTitle(); echo $post->getText(); echo $post->getCategory()->getName(); // naziv kategorije echo $post->getCategory()->getCategory->getName(); // naziv podkategorije CategoryController.php - Čupanje jedne kategorije i svih postova te kategorije - tu nastaje problem jer nikako ne mogu dobiti sve postove iz kategorije - getPosts(), ne znam kako da taj dio povežem Code: $categoryMapper = new CategoryMapper(); $category = $categoryMapper->load($id); echo $category->getName(); foreach ($category->getPosts() as $post) { echo $post->getTitle(); echo $post->getText(); } PostEntity.php Code: class Post extends Entity { protected $title; protected $text; protected $category; public function getTitle() { return $this->title; } public function getText() { return $this->text; } public function getCategory() { return $this->category; } } PostMapper.php Code: class PostMapper extends Mapper { protected $table_id; protected $table_name; public function load($id) { $data = $this->db->load($this->table_name)->select("post.*, category.name AS category_name, category.description AS category_description")->leftJoin("category ON category.id = post.id_category)->where("id=$id"); if ($data) { $post = new Post($data); } } } CategoryEntity.php Code: class Category extends Entity { protected $name; protected $posts; public function getName() { return $this->name; } public function getPosts() { return $this->posts; } } S metodom getPosts() bi trebao dobiti sve postove iz kategorije, ali kako da taj dio povežem s ostatakom. Unutar Entityija je sama bussiness logika tako da povezivanje s bazom ne dolazi u obzir. Razmišljao sam da u controlleru napravim ovako (iako mi nije baš najsretnije rješenje): Code: $categoryMapper = new CategoryMapper(); $category = $categoryMapper->load($id); $postMapper = new PostMapper(); $posts = $postMapper->loadAllByCategory($category->getId()); echo $category->getName(); foreach ($posts as $post) { echo $post->getTitle(); } |