我有兩個表通過外鍵鏈接 - college_id 它的代碼都是使用蛋糕烘烤功能生成的。CakePHP爲兩個鏈接表生成SQL語句錯誤。不唯一別名
每當我嘗試調用由CakePHP爲其中一個表生成的視圖時,它總是生成一個帶有錯誤的SQL語句。
的錯誤是:
SQLSTATE [42000]:語法錯誤或訪問衝突:1066不是唯一的表/別名: '課程'
SQL語句:
SELECT Courses.course_id AS `Courses__course_id`, Courses.course_name AS `Courses__course_name`, Courses.cource_code AS `Courses__cource_code`, Courses.college_id AS `Courses__college_id`, Colleges.college_id AS `Colleges__college_id`, Colleges.college_name AS `Colleges__college_name`
FROM courses Courses
INNER JOIN courses Courses ON Courses.course_id = (Courses.course_id)
INNER JOIN colleges Colleges ON Colleges.college_id = (Courses.college_id)
LIMIT 20 OFFSET 0
我知道這個錯誤是在同一查詢中使用兩次別名「課程」的事實。 這裏:「FROM課程INNER JOIN課程課程」
但我找不到防止這種情況發生的方法。 我查看了CakePHP 3.0的鏈接表文檔,但我無法找到一種方法來定義它命名這個別名的方式。 任何提示?
CoursesTable.php
<?php
namespace App\Model\Table;
use App\Model\Entity\Course;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
/**
* Courses Model
*
* @property \Cake\ORM\Association\BelongsTo $Courses
* @property \Cake\ORM\Association\BelongsTo $Colleges
*/
class CoursesTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
parent::initialize($config);
$this->table('courses');
$this->displayField('course_name');
$this->primaryKey('course_id');
$this->belongsTo('Courses', [
'foreignKey' => 'course_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Colleges', [
'foreignKey' => 'college_id',
'joinType' => 'INNER'
]);
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->requirePresence('course_name', 'create')
->notEmpty('course_name')
->add('course_name', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);
$validator
->requirePresence('cource_code', 'create')
->notEmpty('cource_code');
return $validator;
}
/**
* Returns a rules checker object that will be used for validating
* application integrity.
*
* @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
* @return \Cake\ORM\RulesChecker
*/
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->existsIn(['course_id'], 'Courses'));
$rules->add($rules->existsIn(['college_id'], 'Colleges'));
return $rules;
}
}
課程表模式:
course_id - PK
course_name
course_dode
college_id - FK
你爲什麼要加入「課程」?你對連接的數據沒有做任何事情。只需將「課程」加入「學院」;無需將課程加入課程,然後再加入學院。 –
我明白你的意思確實不需要。 代碼是由蛋糕自動生成的,所以它以某種方式搞砸了。 我確實看過表格的定義,但都很好看。 '$ this-> table('courses'); $ this-> displayField('course_name'); $ this-> primaryKey('course_id'); $ this-> belongsTo('Colleges',[ 'foreignKey'=>'college_id', 'joinType'=>'INNER' ]); $ this-> belongsTo('Courses',[ 'foreignKey'=>'course_id', 'joinType'=>'INNER' ]);' – Nandox7
您是否打算讓課程屬於課程關係?看起來你錯誤地設置了這個關聯。 – drmonkeyninja