设计师:
tableName:设计师
行动:
字段:[名称]
柱:
身份证件:
无符号:真
主要:真
自动递增:真
类型:字符串(30)
默认时
I18n
$d = Doctrine_Query::create()
->select('id, t.name')
->from('Designer d')
->leftJoin('d.Translation t')
->where("t.lang = 'en'")
->execute();
比如说,我可以更方便地为当前语言设置一些常量
en
,并拥有
i18nable
字段对应于它,因此具有这样的查询
$d = Doctrine_Query::create()
->select('id, name')
->from('Designer d')
->execute();
我正在尝试做一个新的行为,扩展默认的行为,它可以提供这样的东西,但我需要你的帮助。
define('LANGUAGE', 'en')
. 基本行为类是
class TransparentI18N extends Doctrine_Template
{
private $_translation = NULL;
public function setUp()
{
$this->addListener(new TransparentI18NListener());
$this->actAs(new Doctrine_Template_I18n($this->_options));
}
}
因此,我们的想法是添加一个监听器,该监听器将修改查询以设置连接,并在select子句中出现所需字段时选择这些字段。这个
TransparentI18NListener
preDqlSelect
,它接收
Doctrine_Event
对象。我可以得到相关的
Doctrine_Query
甚至
getDqlPart('select')
id, t.name
,
如何得到每个子句对应的表
那我就得设置
Doctrine_Record
实例。
我真的不太愿意添加这样一个类,但是万一其他的都失败了,我应该能够让它保存这些字段并重写
__get
方法来显示转换字段(如果请求)。
我不敢去想insert/update/delete部分,但是如果我处理了上面的问题,我就能够为dql添加钩子并完成任务。
你认为这样的想法在一般情况下是可能的,而不与核心理论库发生冲突吗?必须以默认方式使用它将是一个巨大的痛苦在*。。。