美好的一天! 我对CakePHP 3有一个小问题。我有这样的联想:
$this->belongsToMany('AdminUserGroup',[
'classname' => 'AdminUserGroup',
'foreignKey' => 'admin_user_id',
'targetForeignKey' => 'group_id',
'joinTable' => 'AdminUsersGroups'
]);
我正在使用此代码返回记录:
public function getAll()
{
$ble = $this->find()
->contain(['AdminUserGroup' ]);
return $ble;
}
直到它工作,但当我想选择指定的字段时,我有问题。当我添加select方法时,我不会看到包含的表中的列:
public function getAll()
{
$ble = $this->find()->select(['id', 'name', 'surname'])
->contain(['AdminUserGroup']);
return $ble;
}
所以我添加了回调查询:
public function getAll()
{
$ble = $this->find()->select(['id, name, surname'])
->contain(['AdminUserGroup' => function ($q) { return $q->select(['group_name']);}]);
return $ble;
}
但它仍然无法运作。我只能看到主表中的字段。包含表格的字段不会出现。
{
"id": "8",
"name": "Ola",
"lastname": "BleBle",
"admin_user_group": []
},
我可以修理它吗?
答案 0 :(得分:2)
manual包含以下评论:
限制从关联中提取的字段时,必须确保选择了外键列。如果未选择外键字段,将导致相关数据不会出现在最终结果中。
和
如果您使用select()限制了要加载的字段,但又希望从包含的关联中加载字段,则可以将关联对象传递给select()。
和
或者,如果您有多个关联,则可以使用autoFields()。
那里有一些有用的例子。所以:
$ble = $this->find()
->select(['id', 'name', 'surname'])
->contain(['AdminUserGroup' ])
->autoFields(true);
或者如果您使用3.1或更高版本:
$ble = $this->find()
->select(['id', 'name', 'surname'])
->select($this->AdminUserGroup);
从示例中看,第二个版本中可能不需要contain
调用,因此我将其删除了。
答案 1 :(得分:0)
尝试这样的事情。
$ble = $this->find()->select(['Table.id, Table.name, Table.surname'])->contain(['AdminUserGroup']);