2016-06-08 6 views
0

Ich bekomme diesen Fehler auf einem Feld, das existiert. Ich kann kein Feld aus der TutoringTypes-Tabelle anzeigen. Meine Verbindung ist falsch und ich kann nicht sehen, wo ich den Fehler gemacht habe, da ich glaube, dass ich die Konventionen befolgt habe. Die Dokumente sprechen jedoch über Plural Tabellennamen, aber geben singuläre Variablennamen als ein Beispiel?Ich kann nicht Felder aus einer Tabelle mit einem Unterstrich in CakePHP3 anzeigen

Spalte nicht gefunden: 1054 Unknown column 'tutoring_types.value' in 'field list'

$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

Antwort

2

, die nicht ist, wie die Dinge sind ment zu tun. In Abfragen müssen Sie die Aliase der Tabelle/Assoziation verwenden, mit denen sie registriert/ausgewählt wurden, nicht die tatsächlichen Tabellennamen.

Standardmäßig folgen die Aliase der Konvention der Tabellenklassennamen, dh plural und camel cased/capsed. Anstatt tutoring_types verwenden Sie TutoringTypes, schauen Sie sich einfach die Aliase im generierten SQL an.

Der Plural Tabellennamen singulären Variablennamen Beispiel ist eine andere Konvention, die nichts mit Tabelle Aliasse zu tun hat, sondern mit Zuordnungstypen (1:n/n:n = Plural, n:1/1:1 = singular) und Einheiten (eine Einheit = ein aufnehmen, daher werden singuläre Namen verwendet).

btw, Sie sind nur für tutoring_types diesen Fehler empfangen, weil Sie ein DBMS verwenden, die Kennungen in einem Fall unempfindlich Weise behandelt, dh lessons wird Lessons übereinstimmen, aber tutoring_types wird natürlich TutoringTypes nicht überein, da es nicht einmal ist das gleiche wenn Groß- und Kleinschreibung nicht beachtet wird.

+0

Sie haben Recht, und ich habe über Groß-und Kleinschreibung Typen verwirrt. Ich denke, die Dokumente könnten dies deutlicher machen, da Modelle mit Kleinbuchstaben in Abfragen nicht funktionieren sollten. Trotzdem danke. – ajt