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

时间:2016-06-08 23:48:40

标签: cakephp cakephp-3.0

我在确实存在的字段上收到此错误。我无法显示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

1 个答案:

答案 0 :(得分:2)

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

默认情况下,别名遵循表类名称约定,即复数和驼峰cased / capsed。因此,您使用tutoring_types代替TutoringTypes,只需查看生成的SQL中的别名即可。

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

顺便说一下,您只收到tutoring_types的错误,因为您使用的是以不区分大小写的方式处理标识符的DBMS,即lessons将匹配Lessons,但是{{1当然不会匹配tutoring_types,因为它在处理不区分大小写时甚至不相同。