디자이너 : TABLENAME : 디자이너 actAs : 국제화 : 필드 : [이름] 열 : ID : 유형 : 정수 (2) 부호 : 사실 주 : 사실 자동 증가 : 사실 이름 : 유형 : 문자열 (30) NOTNULL : 사실Doctrine에서 고스트 필드를 만드는 방법은 무엇입니까?
기본 I18n
동작이
$d = Doctrine_Query::create()
->select('id, t.name')
->from('Designer d')
->leftJoin('d.Translation t')
->where("t.lang = 'en'")
->execute();
01,235처럼 사용할 수 있어야하지만 16,
나는 현재 언어에 약간의 일정을 설정하는 faaar 더 편리 할 것, 따라서 위의 하나에 해당
$d = Doctrine_Query::create()
->select('id, name')
->from('Designer d')
->execute();
같은 쿼리를 가지고, en
말을하고에 해당하는 모든 i18nable
필드가 있습니다.
저는 새로운 동작을 시도하고 있습니다. 기본 동작을 확장하여 이러한 동작을 제공 할 수 있지만 귀하의 도움이 필요합니다.
필요한 언어를 얻는 것이 쉽기 때문에 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
메서드를 재정의해야합니다.
삽입/업데이트/삭제 부분에 대해 생각하기가 너무 무서웠지만 위의 문제를 해결하면 dql에 후크를 추가하고 작업을 완료 할 수 있기를 바랍니다.
당신은 핵심 교리 라이브러리를 엉망으로 만들지 않고도 그러한 생각을 일반적으로 가능하다고 생각합니까? 기본 방식으로 사용하면 *의 큰 고통이 될 것입니다 ...
이 템플릿을 완성 했습니까 ???내가 정확히 똑같은 것을 찾고 있는데 – ZolaKt