Всем привет.
Только недавно начал осваивать phalcon, и столкнулся с некоторыми проблемами, когда решил прикручивать бд.
Облазил кучу тем, но так и не смог в своем случае настроить отношения между моделями.
Я хочу вытягивать из бд title и т.д, вот так пытался реализовать:
ControllerBase:
<?php
namespace Coursor\Controllers;
use Coursor\Models\Pages;
use Coursor\Models\PageSeo;
class ControllerBase extends \Phalcon\Mvc\Controller {
protected function checkAjaxRequired() {
if (!$this->request->isAjax()) {
$this->response->setStatusCode(404, "Not Found");
$this->dispatcher->forward(array(
'namespace' => 'Coursor\Controllers',
'controller' => 'errors',
'action' => 'error404'
));
return false;
}
return true;
}
public function initialize() {
$action = $this->router->getActionName();
$controller = $this->router->getControllerName();
$pages = Pages::findFirst(array(
"page_controller = :controller: AND page_action = :action:",
"bind" => array(
"controller" => $controller,
"action" => $action
)
));
$pageSeo = PageSeo::findFirstByPage_id($pages->id);
if (count($pages) != 0) {
$this->tag->setTitle($pageSeo->page_title . ' ' . count($pages));
}
else{
$this->tag->setTitle('NO TITLE');
}
}
}
Pages model:
<?php
namespace Coursor\Models;
use Phalcon\Mvc\Model;
class Pages extends Model {
public $id;
public $page_controller;
public $page_action;
public function initialize() {
$this->setSource("pages");
$this->hasMany("id", "Coursor\Models\PageSeo", "page_id", array(
'alias' => 'pageSeo'
));
}
}
PageSeo model:
<?php
namespace Coursor\Models;
use Phalcon\Mvc\Model;
class PageSeo extends Model {
public $id;
public $page_id;
public $page_title;
public $meta_description;
public $meta_keywords;
public function initialize() {
$this->setSource("page_seo");
$this->belongsTo("page_id", "Coursor\Models\Pages", "id", array(
'alias' => 'page'
));
}
}
Вроде такой способ работает, но не все гладко, при использовании
Pages::findFirst, count($pages) всегда равен 1, даже если записи нет в бд, а при использовании
Pages::find, count($pages) работает как надо, но перестает работать
$pages->id.
Подскажите, как сделать правильно?
UPD
Спасибо, проблему с отображением отсутствия записи в базе решил. Остался вопрос о правильном использовании отношений как в примере в доках:
$robot = Robots::findFirst();
$robotsParts = $robot->robotsParts; // all the related records in RobotsParts
только
$pages = Pages::findFirst(array(
"page_controller = :controller: AND page_action = :action:",
"bind" => array(
"controller" => $controller,
"action" => $action
)
));
$pages->pageSeo->page_title; //для отображения тайтла страницы
такое сделать не получается.