Doktrini hayalet alanları nasıl yapılır?

0 Cevap php
Designer:
  tableName: designers
  actAs:
    I18n:
      fields: [name]
  columns:
    id:
      type: integer(2)
      unsigned: true
      primary: true
      autoincrement: true
    name:
      type: string(30)
      notnull: true

Default I18n davranış bu şekilde kullanılması gerekir iken

$d = Doctrine_Query::create()
                ->select('id, t.name')
                ->from('Designer d')
                ->leftJoin('d.Translation t')
                ->where("t.lang = 'en'")
                ->execute();

Ben mevcut dilinde bazı sabit ayarlamak için faaar daha uygun olurdu, en demek, her i18nable alanı böylece bu tür sorgu sahip, buna karşılık var

$d = Doctrine_Query::create()
            ->select('id, name')
            ->from('Designer d')
            ->execute();

Yukarıdaki birine denk.

Ben böyle şeyleri sağlayabilir varsayılan birini, uzanan, yeni bir davranışı yapmak için çalışıyorum, ama yardımına ihtiyacım var.

Gerekli dil almak kolaydır, o yüzden sadece define('LANGUAGE', 'en') var diyelim. Temel davranış sınıfı

class TransparentI18N extends Doctrine_Template
{
    private $_translation = NULL;

    public function setUp()
    {
        $this->addListener(new TransparentI18NListener());

        $this->actAs(new Doctrine_Template_I18n($this->_options));
    }
}

Yani fikir bir dinleyicisi eklemek için, yani ayarlamak için sorgu katılır değiştirebilir ve alanları seçme fıkra mevcut zaman gerekli alanları seçmek olacaktır. TransparentI18NListener preDqlSelect, Doctrine_Event nesne aldığı içerir. Ve ben ilgili Doctrine_Query alabilir ve hatta getDqlPart('select') ikincisi döner gibi ham seçin dize, çalışır, ama id, t.name, how can I get, to which table each clause corresponds?

Sonra Doctrine_Record Mesela alanlarını ayarlamak gerekiyor. Is it possible without making models extend some custom class which would give such functionality? Ben böyle bir sınıf eklemek için gerçekten isteksiz değilim, ama diğer her şey başarısız durumda, ben bu alanları kaydetmek ve tercüme alanları göstermek için __get yöntemini geçersiz kılmak gerekir Onlar istendiği takdirde.

Ben ekleme / güncelleme / silme parçası hakkında düşünmek için çok korktum, ama ben yukarıdaki sorunları ile uğraşmak durumunda umarım, ben DQL ve işi almak için kanca eklemek mümkün olurdu.

Eğer böyle bir düşünce çekirdek doktrin kütüphaneleri ile karışıklık olmadan genel olarak mümkün olduğunu düşünüyor musunuz? Varsayılan şekilde kullanmak zorunda * büyük bir acı olurdu ...

0 Cevap