CakePHP3 - 父级属于 - 数据库错误 PDOException


CakePHP3 - Parent BelongsTo - Database Error PDOException

我在这里做错了什么,还是某种错误?

在票务表上.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

应该开箱即用,表中的连接应该正确别名为 RegistarsParents ,并且肯定直到最近才有效,所以是的,这是一个错误,可能与 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',
    ]);
  1. "className" => "Users" 应该是 'className' => 'Registars'

  2. "类名"=>"票证",应为"类名"=>"家长">

谢谢

相关文章: