Phalcon中的关系

时间:2014-11-12 16:17:16

标签: php relationship phalcon

我正在开发一个多语言项目,我需要帮助从数据库中获取正确的语言。

在我的会话中,我已经从数据库tabe中存储了lang代码和id:

DB TABLE语言

ID    lang_code   lang
1     en-us       English (US)
2     es-ES       Spanish (ES)
3     de-DE       Deutsch (DE)

然后我有两个菜单表

DB TABLE菜单

ID    parent    link
1     null      intro/
2     null      about/
3     null      terms/

和DB TABLE menu_translation

ID    menu_id    lang_id    title
1     1          1          Intro
2     2          1          About
3     3          1          Terms & Conditions
4     1          2          Intro

在我的模特中我做了这个

模型语言

<?php
class Languages extends Phalcon\Mvc\Model {
    public $id;
    public $lang_code;
    public $lang;
}

模特菜单

<?php
class Menu extends Phalcon\Mvc\Model {
    public $id;
    public $parent;
    public $link;
    public function initialize() {
        $this->hasMany('id', 'Menu', 'parent');
    }
}

这个父母因为我有嵌套菜单所以我需要把哪个菜单放在哪个菜单中。

MODEL MenuTranslation

<?php
class MenuTranslation extends Phalcon\Mvc\Model {
    public $id;
    public $menu_id;
    public $lang_id;
    public $title;
}

我的问题是如何设置关系,所以我只能获得在会话中设置的语言的MenuTranslation,所以稍后我可以显示如下内容:

{% for item in menu %}
    {{ menu.menuTranslation.title }}
{% endfor %}

它是否可能,如果是这样我怎么办?

1 个答案:

答案 0 :(得分:1)

菜单模型中的关系错误。

模特菜单

<?php
class Menu extends Phalcon\Mvc\Model {
public $id;
public $parent;
public $link;
public function initialize() {
    $this->hasMany('id', 'MenuTranslation', 'menu_id');
}
}

MODEL MenuTranslation

<?php
class MenuTranslation extends Phalcon\Mvc\Model {
public $id;
public $menu_id;
public $lang_id;
public $title;

   public function initialize()
   {
      $this->hasMany('menu_id', 'Menu', 'id');
      $this->hasMany('lang_id', 'Languages', 'id');
   }
}

模板

{% for item in menu %}
{{ menu.getMenuTranslation().getLanguages().title }}
{% endfor %}

另外,我建议你创建一个自定义查询,在1个查询中加入所有3个表。