2016-06-08 38 views
0

我在存在的字段上收到此錯誤。我不能顯示TutoringTypes表中的任何字段。我的聯繫是錯誤的,我不知道我犯了什麼錯誤,因爲我相信我遵循了這些慣例。然而,文檔談論複數表名稱,但給單一變量名稱作爲例子?沒有找到我無法在cakephp3中使用下劃線顯示錶中的字段

柱: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

回答

2

這不是事情是如何換貨工作要做。在查詢中,您必須使用已註冊/選擇的表/關聯別名,而不是實際的表名。

默認情況下,別名遵循表類名稱約定,即複數和駱駝套/ capsed。因此,您可以使用TutoringTypes而不是tutoring_types,只需查看生成的SQL中的別名即可。

複數表名,單數變量名例如是具有無關表別名不同的約定,但與關聯類型(1:n/n:n =複數,n:1/1:1 =單數)和實體(一個實體=一個記錄,因此使用單數名稱)。

順便說一句,您收到該錯誤只爲tutoring_types,因爲你使用的是處理在不區分大小寫的方式標識符的DBMS,即lessons將匹配Lessons,但tutoring_types當然會不匹配TutoringTypes,因爲它甚至不是同當處理時不區分大小寫。

+0

你是對的,我對於區分大小寫的類型感到困惑。我認爲文檔可以使這個更清晰,因爲在查詢中使用帶小寫字母名稱的模型不應該起作用。不管怎樣,謝謝。 – ajt