CakePHP3 - Родитель BelongsTo - Ошибка базы данных PDOException

0

Что я здесь делаю неправильно, или это какая-то ошибка?

В TicketsTable.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-запрос:

SELECT Tickets.id AS Tickets__id, Tickets.parent_id AS Tickets__parent_id, Tickets.title AS Tickets__title, Tickets.description AS Tickets__description, Tickets.registar_id AS Tickets__registar_id, Tickets.type_id AS Tickets__type_id, Tickets.origin_id AS Tickets__origin_id, Tickets.origin_date AS Tickets__origin_date, Билеты.process_id AS Tickets__process_id, Tickets.activity_id AS Tickets__activity_id, Tickets.category_id AS Tickets__category_id, Tickets.supplier_id AS 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.modified AS Tickets__modified, Tickets.created AS Tickets__created, Users.id AS Users__id, Users.name AS Users__name, Users.username AS Users__username, Users.password AS Users__password, Users.email AS Users__email, Users.active AS Users__active, Users.modified AS Users__modified, Users.created AS Users__created FROM tickets Билеты LEFT JOIN билеты Билеты ON Tickets.id = (Tickets.parent_id) LEFT JOIN пользователи Пользователи ON Пользователи.id = (Tickets.registar_id) WHERE Tickets.id =: c0 LIMIT 1

  • 0
    Вы используете Tickets качестве псевдонима два раза. Измените один на Tickets2 или что-то.
  • 0
    SQL-запрос создается ORM на платформе CAKEPHP 3, поэтому я думаю, что это проблема в моих настройках TicketsTable.php или в каркасе.
Теги:
cakephp-3.0
pdo
parent
belongs-to

2 ответа

0
Лучший ответ

Это должно работать из коробки, объединенные в таблицы должны быть правильно сгенерированы как Registars и Parents, и наверняка это сработало до недавнего времени, так что да, это ошибка, возможно связанная с https://github.com/cakephp/CakePHP/тянуть/5836

Сообщите об этом как о проблеме в GitHub.

Udate На самом деле кажется, что об этом уже сообщалось: https://github.com/cakephp/cakephp/issues/5882

  • 0
    Спасибо, я должен начать смотреть на проблемы с пирожными до того, как stackoverflow.
0

Пожалуйста, измените свое имя на имя класса ассоциации следующим образом

$this->belongsTo('Registars', [
        'className' => 'Registars',
        'foreignKey' => 'registar_id'
    ]);
    $this->belongsTo('Parents', [
        'className' => 'Parents',
        'foreignKey' => 'parent_id',
    ]);
  1. 'className' => 'Пользователи' должны быть 'className' => 'Registars'

  2. 'className' => 'Tickets', должен быть 'className' => 'Parents'

благодаря

Ещё вопросы

Сообщество Overcoder
Наверх
Меню