gpt4 book ai didi

CakePHP 3. 可包含的选择

转载 作者:行者123 更新时间:2023-12-03 03:25:36 24 4
gpt4 key购买 nike

我有多对多关系,其中 TrainingPrograms 可以包含许多练习。它们通过链接表ExercisesTrainingPrograms 进行链接。

我想从练习中选择某些字段:

$trainingPrograms = $this->TrainingPrograms->find()
->contain(['Exercises' => function ($q) {
return $q
->select(['id','name','description']);
}
])
->select(['id','name','description'])
->where(['user_id' => $this->Auth->user('id')]);

我得到的结果看起来像这样:

   "trainingPrograms": [
{
"id": 1,
"name": "Monday Madness",
"description": "hes",
"exercises": [
{
"id": 2,
"name": "Barbell Bench Press",
"description": "Medium grip ",
"exercise_categories_id": 2,
"exercise_difficulties_id": 1,
"created": "2015-09-16T07:07:01+0000",
"modified": "2015-09-16T07:07:01+0000",
"_joinData": {
"exercise_id": 2,
"id": 28,
"training_program_id": 1,
"created": "2015-10-07T15:45:49+0000"
}
},
{
"id": 2,
"name": "Barbell Bench Press",
"description": "Medium grip ",
"exercise_categories_id": 2,
"exercise_difficulties_id": 1,
"created": "2015-09-16T07:07:01+0000",
"modified": "2015-09-16T07:07:01+0000",
"_joinData": {
"exercise_id": 2,
"id": 35,
"training_program_id": 1,
"created": "2015-10-07T19:58:12+0000"
}
}
]
}]

如您所见,我获得了练习表的所有字段,而不是我要求的字段。为什么会这样,我做错了什么?

最佳答案

如果没有通过 fields 选项定义任何字段,

belongsToMany 关联会启用 Query::autoFields()。这是必要的,因为外键 (exercise_id) 被添加到 SELECT 子句中,否则会导致无法选择其他字段(不确定这是在哪个上下文中)实际需要)。

参见Source > \Cake\ORM\Association\BelongsToMany::_buildQuery()

稍后会调用所包含关联的回调,因此您必须禁用 autoFields() 才能通过查询生成器限制所选字段。

->contain(['Exercises' => function ($q) {
return $q
->select(['id','name','description'])
->autoFields(false);
}

我真的无法判断这是否是预期的行为。您可能想提出一个问题 over at GitHub如需澄清,或在 IRC 上询问。

关于CakePHP 3. 可包含的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003321/

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