2017-02-01 43 views
1

相關的我在蛋糕PHP 3三個表:
- ImagesTable
- ImagesHasImagesTable
- ImageTypesTable蛋糕PHP 3:查找查詢的belongsToMany - 獲得實體連接表

一個圖像有許多ChildImages。我已經與 belongsToMany Association聯繫在一起。

$this->belongsToMany('ChildImages',[ 
     'className' => 'Images', 
     'targetForeignKey' => 'images_id', 
     'foreignKey' => 'original_id', 
     'joinTable' => 'images_has_images', 
]); 

現在我得到的(幾乎)所需的結果與含有所有相關圖像 這一個「child_images」陣列是查詢:

$image = $imageTable->get($id,['contain' => ['ChildImages']]); 

並且這特定部分中的結果:

[child_images] => Array(
    [0] => Array(
     [id] => 36 
     [image_size] => 269442 
     [image_width] => 726 
     .... 
     [_joinData] => Array(
      [original_id] => 13 
      [images_id] => 36 
      [image_types_id] => 1 
     ) 
    ) 
) 

我需要的是ImageTypes中的相關實體,其中[image_types_id] => 1位於子圖像數組內。有沒有可能達到這一點,而無需遍歷數組,併爲每個child_image做一個查詢。

感謝

回答

1

這不是(還)可以包含關聯的連接表,使用through選項提供一個具體的表類即使是在(你可能要suggest that as an enhancement)。

你可以做的是創建一個連接表一個額外的關聯,並用一個具體的表類,爲ImageTypes提供關聯也類似:

class ImagesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     // ... 

     $this->hasMany('ImagesHasImages',[ 
      'foreignKey' => 'original_id' 
     ]); 
    } 
} 

,爲ImagesHasImagesTable類:

class ImagesHasImagesTable extends Table 
{ 
    public function initialize(array $config) 
    { 
     // ... 

     $this->belongsTo('Images', [ 
      'alias' => 'Images', 
      'foreignKey' => 'original_id' 
     ]); 

     $this->belongsTo('ChildImages', [ 
      'alias' => 'Tags', 
      'foreignKey' => 'image_id' 
     ]); 

     $this->belongsTo('ImageTypes'); 
    } 
} 

隨着ImageTypes額外的關聯中,你可以包含如下數據:

['ImagesHasImages' => ['ChildImages', 'ImageTypes']] 

返回的結構當然會有些不同,所以您可能需要重新格式化它。

又見