我在确实存在的字段上收到此错误。我无法显示TutoringTypes表中的任何字段。我的联系是错误的,我无法看到我犯了错误,因为我相信我遵守了惯例。然而,文档讨论了多个表名,但是以单数变量名为例?
找不到列:1054'字段列表'中的未知列'tutoring_types.value'
$query3 = $this->Lessons->find()
->contain(['Tutors', 'TutoringTypes'])
->select(['lessons.id','lessons.lesson_date','tutors.id','tutors.first_name','tutors.last_name','lessons.tutoring_type_id',
'tutoring_types.value'])
->where(['Lessons.lesson_date >' => $a3,'Lessons.lesson_date <' => $a4,
'OR' => [['lessons.tutoring_type_id' => 2], ['lessons.tutoring_type_id' => 1]]
]);
Lessons Model
public function initialize(array $config)
{
parent::initialize($config);
$this->belongsTo('TutoringTypes', [
foreignKey' => 'tutoring_type_id'
]);
//////
SELECT
lessons.id AS `lessons__id`,
lessons.lesson_date AS `lessons__lesson_date`,
tutors.id AS `tutors__id`,
tutors.first_name AS `tutors__first_name`,
tutors.last_name AS `tutors__last_name`,
lessons.tutoring_type_id AS `lessons__tutoring_type_id`,
tutoring_types.value AS `tutoring_types__value`
FROM
lessons Lessons
LEFT JOIN tutors Tutors ON Tutors.id = (Lessons.tutor_id)
LEFT JOIN tutoring_types TutoringTypes ON TutoringTypes.id = (Lessons.tutoring_type_id)
WHERE
(
Lessons.lesson_date > '2015-05-30'
AND Lessons.lesson_date < '2016-06-01'
AND (
lessons.tutoring_type_id = '2'
OR lessons.tutoring_type_id = '1'
)
)
http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html http://book.cakephp.org/3.0/en/intro/conventions.html
答案 0 :(得分:2)
这不是事情要做的事情。在查询中,您必须使用已注册/选择的表/关联别名,而不是实际的表名。
默认情况下,别名遵循表类名称约定,即复数和驼峰cased / capsed。因此,您使用tutoring_types
代替TutoringTypes
,只需查看生成的SQL中的别名即可。
复数表名称,单数变量名称示例是与表别名无关的不同约定,但具有关联类型(1:n
/ n:n
=复数,n:1
/ 1:1
=单数)和实体(一个实体=一个记录,因此使用单数名称)。
顺便说一下,您只收到tutoring_types
的错误,因为您使用的是以不区分大小写的方式处理标识符的DBMS,即lessons
将匹配Lessons
,但是{{1当然不会匹配tutoring_types
,因为它在处理不区分大小写时甚至不相同。