Doctrine
|
|
Переводим таблицу i18n
В action
$this->page = Doctrine::getTable('Page')
->createQuery('a')
->leftJoin('a.Translation t')
->where('a.id=?',array($request->getParameter('id')))
->fetchOne();
$this->page->setDefaultCulture($request->getParameter('from_lang'));
$translate = new GoogleTranslateApi;
$translate->FromLang = $request->getParameter('from_lang');
$translate->ToLang = $request->getParameter('to_lang');
$title = $translate->translate($this->page->getTitle());
$content = $translate->translate($this->page->getContent());
$seo_t = $translate->translate($this->page->getSeoTitle());
$seo_k = $translate->translate($this->page->getSeoKeyword());
$seo_d = $translate->translate($this->page->getSeoDescription());
$this->page->setDefaultCulture($request->getParameter('to_lang'));
$this->page->setTitle($title);
$this->page->setContent($content);
$this->page->setSeoKeyword($seo_t);
$this->page->setSeoDescription($seo_d);
$this->page->save();
$this->redirect('page/edit?id='.$this->page->getId());
|
28 июля 2010 г. |
|
|
|
Doctrine
|
|
Работа с древовидными структурами
Проверяем есть ли дети или родители
$hasChildren = $category->getNode()->hasChildren();
$hasParent = $category->getNode()->hasParent();
Получаем родителей
$projects->getNode()->getChildren()
Передвигаем
if($a->getNode()->hasNextSibling())
{
$p = $a->getNode()->getNextSibling();
$a->getNode()->moveAsNextSiblingOf($p);
}
|
27 июля 2010 г. |
|
|
|
Doctrine
|
|
Связи в schema.yml
Связь один ко многим
Shedule:
actAs:
Timestampable: ~
columns:
id:
type: integer(4)
primary: true
autoincrement: true
predmet_id:
type: integer(4)
notnull: true
relations:
Predmet:
local: predmet_id
onDelete: CASCADE
foreign: id
|
21 июля 2010 г. |
|
|
|
Doctrine
|
|
Перегружаем сетер
В модели пишем
public function setSchoolId($value)
{
$this->setSchoolName('ssss');
$this->_set('school_id', $value);
}
|
21 июля 2010 г. |
|
|
|
Doctrine
|
|
Doctrine symfony постраничка pager
Реализация постраничной навигации.
В action пишу
$q = Doctrine_Query::create()
->from('School s')
->leftJoin('s.Translation t');
$this->pager = new sfDoctrinePager('School',2);
$this->pager->setQuery($q);
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
В шаблоне
getResults() as $school): ?>
Сам хелпер
function pager_navigation($pager, $uri)
{
$navigation = '';
if ($pager->haveToPaginate())
{
$uri .= (preg_match('/\?/', $uri) ? '&' : '?').'page=';
// First and previous page
if ($pager->getPage() != 1)
{
$navigation .= link_to(image_tag('/sf/sf_admin/images/first.png', 'align=absmiddle border=0'), $uri.'1');
$navigation .= link_to(image_tag('/sf/sf_admin/images/previous.png', 'align=absmiddle border=0'), $uri.$pager->getPreviousPage()).' ';
}
// Pages one by one
$links = array();
foreach ($pager->getLinks() as $page)
{
$links[] = link_to_unless($page == $pager->getPage(), $page, $uri.$page);
}
$navigation .= join(' ', $links);
// Next and last page
if ($pager->getPage() != $pager->getLastPage())
{
$navigation .= ' '.link_to(image_tag('/sf/sf_admin/images/next.png', 'align=absmiddle border=0'), $uri.$pager->getNextPage());
$navigation .= link_to(image_tag('/sf/sf_admin/images/last.png', 'align=absmiddle border=0'), $uri.$pager->getLastPage());
}
$navigation .= ' <b>'.pager_info($pager).'</b>';
}
|
19 июля 2010 г. |
|
|
|
Doctrine
|
|
Часто используемые запросы Doctrine
Взаимодействие symfony с doctrine.
Манипуляции с данными.
Cвязь I18N уменьшающая количество запросов к базе
$this->schools = Doctrine::getTable('School')
->createQuery('a')
->leftJoin('a.Translation t')
->execute();
Нахождение записи по первичному ключу
$i = Doctrine::getTable('Alert')->find(1);
Извлечение одной записи
$plan = Doctrine::getTable('PlanLessons')
->createQuery('a')
->where('a.school_id=? and a.num_lesson=?',array($this->school_id, $this->num_lesson))
->fetchOne();
создание запроса
$q = Doctrine_Query::create()
->from('User u')
->where('u.username = ?', 'jwage');
|
18 июля 2010 г. |
|
|
|