我无法显示cakephp3中带有下划线的表格中的字段

我无法显示cakephp3中带有下划线的表格中的字段,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,我在一个确实存在的字段上得到这个错误。我无法显示TutoringTypes表中的任何字段。我的连接是错误的,我不知道我在哪里犯了错误,因为我相信我遵守了惯例。然而,文档中提到了复数表名,但给出了单数变量名作为示例 未找到列:“字段列表”中的1054未知列“tutoring_types.value” $query3 = $this->Lessons->find() ->contain(['Tutors', 'TutoringTypes']) ->sele

我在一个确实存在的字段上得到这个错误。我无法显示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'
    )
  )
$query3=$this->Lessons->find()
->包含(['Tutors','TutoringTypes'])
->选择(['classes.id'、'classes.classes\u date'、'tutors.id'、'tutors.first\u name'、'tutors.last\u name'、'classes.tutoring\u type\u id',
'辅导类型.值'])
->其中(['Lessons.lesson\u date>'=>$a3,'Lessons.lesson\u date'教程类型\u id'
]);
//////
挑选
lessons.id为'lessons\uu id`,
lessons.lesson\u日期为'lessons\u lesson\u date',
tutors.id作为“tutors\uu id”,
tutors.first\u name作为“tutors\u first\u name”,
tutors.last_name作为“tutors__last_name”,
lessons.tutoring\u type\u id为'lessons\u tutoring\u type\u id`,
tutoring\u types.value作为“tutoring\u types\u value”
从…起
教训
LEFT JOIN tutors tutors ON tutors.id=(Lessons.tutor\u id)
LEFT JOIN tutoring_types TutoringTypes ON TutoringTypes.id=(Lessons.tutoring_type_id)
哪里
(
Lessons.Lessons_日期>'2015-05-30'
和经验教训。经验教训日期<'2016-06-01'
及(
lessons.tutoring\u type\u id='2'
或lessons.tutoring\u type\u id='1'
)
)

事情不是这样做的。在查询中,必须使用注册/选择它们的表/关联别名,而不是实际的表名

默认情况下,别名遵循表类名约定,即复数和驼峰大小写/大写。因此,您可以使用
TutoringTypes
,而不是
TutoringTypes
,只需查看生成的SQL中的别名即可

复数表名,单数变量名示例是一种不同的约定,它与表别名无关,而是与关联类型(
1:n
/
n:n
=复数,
n:1
/
1:1
=单数)和实体(一个实体=一条记录,因此使用单数名称)有关


顺便说一句,您收到的错误仅适用于
tutoringu类型
,因为您使用的DBMS以不区分大小写的方式处理标识符,即
课程
将匹配
课程
,但
tutoringu类型
当然不会匹配
tutoringtype
,因为不区分大小写处理时甚至都不一样。

事情不是这样做的。在查询中,必须使用注册/选择它们的表/关联别名,而不是实际的表名

默认情况下,别名遵循表类名约定,即复数和驼峰大小写/大写。因此,您可以使用
TutoringTypes
,而不是
TutoringTypes
,只需查看生成的SQL中的别名即可

复数表名,单数变量名示例是一种不同的约定,它与表别名无关,而是与关联类型(
1:n
/
n:n
=复数,
n:1
/
1:1
=单数)和实体(一个实体=一条记录,因此使用单数名称)有关


顺便说一句,您收到的错误仅适用于
tutoringu类型
,因为您使用的DBMS以不区分大小写的方式处理标识符,即
课程
将匹配
课程
,但
tutoringu类型
当然不会匹配
tutoringtype
,因为它在不区分大小写时甚至不一样。

你是对的,我确实对区分大小写的类型感到困惑。我认为文档可以让这一点更清楚,因为在查询中使用小写名称的模型是行不通的。无论如何,谢谢。你是对的,我确实对区分大小写的类型感到困惑。我认为文档可以让这一点更清楚,因为在查询中使用小写名称的模型是行不通的。无论如何,谢谢。