gpt4 book ai didi

php - 蛋糕 PHP 3 : Find Query for belongsToMany - get Entity related in join table

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:10 26 4
gpt4 key购买 nike

我在 cake php 3 中有三个表:
- 图片表
- 图片有图片表
- 图片类型表

一个图像有多个子图像。我已经与一个链接在一起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 执行一个查询的情况下达到这一目标。

谢谢

最佳答案

(目前)不可能包含连接表的关联,即使使用 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']]

返回的结构当然会有点不同,所以你可能需要重新格式化它。

另见

关于php - 蛋糕 PHP 3 : Find Query for belongsToMany - get Entity related in join table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com