我在蛋糕php 3中有三个表:
一个镜像有多个ChildImages。我已经和belongsToMany协会联系在一起了。
$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
)
)
)
我需要的是子图像数组中包含image_types_id => 1的ImageTypes的相关实体。有没有可能在不迭代数组并为每个child_image执行一次查询的情况下实现这一点。
谢谢
发布于 2017-02-02 03:58:44
现在还不能包含连接表的关联,即使在使用through
选项来提供具体的表类时(您可能希望使用)。
您可以做的是为连接表创建一个额外的关联,并使用一个具体的表类来为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']]
返回的结构当然会稍有不同,因此您可能需要重新格式化它。
另请参阅
发布于 2019-03-10 11:47:52
可以使用"“
$imageTable->ChildImages->junction();
$image = $imageTable->get($id,
['contain' =>
['ImagesHasImagesTable',
'ImagesHasImagesTable.ImageTypes',
'ImagesHasImagesTable.ChildImages'
]
]);
https://stackoverflow.com/questions/41984884
复制相似问题