我有2个表与之有许多关系:Users
和Tests
,以及使用bake生成的关联TestsUsers
的连接表。
在TestsUsers
中,我有2个额外的字段(除了user_id
和test_id
之外),名称为score
和date
。首次添加记录时,我在TestsController
中手工创建了实体(创建一个$test
实体,添加test.id
、user.id
和user._joinData
),并使用link()
保存数据。
我在检索要编辑的记录时遇到了麻烦。到目前为止,在索引视图(显示所有记录并具有编辑和删除操作)中,我向编辑函数传递了3个参数:第一个元素是test_id
,第二个元素是user_id
和第三个元素是TestsUsers_id
。
我使用过:
$this->Tests->get(($test_id), [
'contain' => 'Users',
function ($q) use ($user_id) {
return $q->where(['Users.id' => $user_id])
}
]])
结果为:
test
(test info)
users
[0]
user_id=1
(user info)
_joinData
id=1
[1]
user_id=1
(user info)
_joinData
id=2
问题是,我如何访问get()
中的_joinData
级别以使用其id。
P.S. =我不被允许加载或使用TestsUsers
模型。谢谢
1条答案
按热度按时间apeeds0o1#
根据您在注解中的解释,连接表行的存在会影响是否检索
Tests
,您通常需要连接关联的表,并应用所需的条件来过滤结果。此外,您还需要对
contain()
应用相同的条件,因为这是一个单独的查询,它只会影响自身,其结果将在PHP级别上合并到Tests
结果中。一个基本示例:
另请参阅
*Cookbook〉数据库访问和ORM〉查询生成器〉按关联数据筛选