我在这里做错了什么,还是某种错误?
在票务表上.php
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config) {
$this->table('tickets');
$this->displayField('title');
$this->primaryKey('id');
$this->addBehavior('Timestamp', [
'events' => [
'Tickets.closed' => [
'close_date' => 'always'
],
]]);
$this->belongsTo('Registars', [
'className' => 'Users',
'foreignKey' => 'registar_id'
]);
$this->belongsTo('Parents', [
'className' => 'Tickets',
'foreignKey' => 'parent_id',
]);
}
在控制器上
/**
* View method
*
* @param string|null $id Ticket id.
* @return void
* @throws 'Cake'Network'Exception'NotFoundException When record not found.
*/
public function view($id = null) {
$ticket = $this->Tickets->get($id, [
'contain' => ['Parents', 'Registars']
]);
$this->set('ticket', $ticket);
$this->set('_serialize', ['ticket']);
}
错误:
错误:SQLSTATE[42000]:语法错误或访问冲突:1066 表/别名不唯一:"票证">
如果使用 SQL 关键字作为表列名,则可以在 config/app.php 中为数据库连接启用标识符引用。
SQL查询:
选择 Tickets.id 为Tickets__id
,Tickets.parent_id为Tickets__parent_id
,票证标题为Tickets__title
,票证描述为Tickets__description
,Tickets.registar_id为Tickets__registar_id
,Tickets.type_id为Tickets__type_id
,Tickets.origin_id为Tickets__origin_id
,Tickets.origin_date为Tickets__origin_date
,Tickets.process_id为Tickets__process_id
,Tickets.activity_id为Tickets__activity_id
,Tickets.category_id为Tickets__category_id
,Tickets.supplier_id为Tickets__supplier_id
, Tickets.safety_id AS Tickets__safety_id
, Tickets.priority_id AS Tickets__priority_id
, Tickets.approved AS Tickets__approved
, Tickets.approve_user_id AS Tickets__approve_user_id
, Tickets.close_date AS Tickets__close_date
, Tickets.close_user_id AS Tickets__close_user_id
, Tickets.comment AS Tickets__comment
, Tickets.status_id AS Tickets__status_id
, Tickets.modified_user_id AS Tickets__modified_user_id
, Tickets.modify AS Tickets__modified
, Tickets.create AS Tickets__created
, Users.id AS Users__id
, Users.name 作为Users__name
, 用户.用户名 作为 Users__username
, 用户.密码 作为 Users__password
, Users.email 作为Users__email
, 用户.活动 作为 Users__active
, 用户.修改为 Users__modified
, 用户.创建为 从工单Users__created
门票 左加入门票 Tickets.id 上的票证 = (Tickets.parent_id( 左加入用户 用户 Users.id = (Tickets.registar_id( 其中 Tickets.id = :c0 限制 1
应该开箱即用,表中的连接应该正确别名为 Registars
和 Parents
,并且肯定直到最近才有效,所以是的,这是一个错误,可能与 https://github.com/cakephp/cakephp/pull/5836 有关
请在 GitHub 上将此报告为问题。
Udate 实际上似乎已经报告过了:https://github.com/cakephp/cakephp/issues/5882
请按如下方式更改您的关联类名
$this->belongsTo('Registars', [
'className' => 'Registars',
'foreignKey' => 'registar_id'
]);
$this->belongsTo('Parents', [
'className' => 'Parents',
'foreignKey' => 'parent_id',
]);
"className" => "Users" 应该是 'className' => 'Registars'
"类名"=>"票证",应为"类名"=>"家长">
谢谢