2017-03-15 152 views
0

我使用的是CakePHP 3.4,我將其用於雙語言網站,其中西班牙語(es)是默認語言環境。我有一個MangasTable該字段slug實施TranslateBehavior,我想查詢它,主要內容如下:TranslateBehavior在默認語言環境中不採用默認字段

$manga = $this->Mangas->find() 
    ->select([ 
     'id', 
     'nombre' 
    ]) 
    ->where([$this->Mangas->translationField('slug') => $slug]) 
    ->firstOrFail(); 

的一點是,部分$this->Mangas->translationField('slug')會得到我的翻譯走樣場的蛞蝓。或多或少,Mangas_slug_translation.content。當它以英語本地化時,這很好,但是使用默認西班牙語,因爲該語言的i18n表中沒有任何條目,它不會返回任何內容。這位窮人的方法將有一個條件的語言,並將其分配給一個$field變量,但這看起來不太好。

有沒有其他方法,或者我錯過了什麼?

回答

1

窮人的方法將有一個語言的條件,並將其分配給$field變量,但這看起來不太好。

由於在檢索數據後原始字段將被替換,並且轉換行爲中沒有可以計算出正確字段的功能,恐怕這就是您必須做的事情進行過濾。您可以將模型層(表格,自定義/擴展行爲)中的邏輯隱藏在DRYness中,但通常AFAICT是無法實現的。

你可能想要open an issue並建議增強。也許根據當前語言環境返回適當的過濾字段的其他方法可以補充translationField()方法。