Как сделать алиас одной из таблиц sql в cakephp 3.6.3 - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь получить доступ к контактам.Я получаю сообщение об ошибке ниже

Error: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'Contacts'

Если вы используете ключевые слова SQL в качестве имен столбцов таблицы, вы можете включить цитирование идентификаторов для вашего подключения к базе данных в config / app.php.

Проверка снимка экрана SQL-запроса

Как установитьAlias ​​() в сопоставлениях таблиц?

ContactsController.php

     public function index()
        {
    $this->paginate = [
        'contain' => ['Users', 'Contacts', 'SourceProspects', 'Status', 
    'Secteurs', 'Products']
    ];
    $contacts = $this->paginate($this->Contacts);
    $this->set(compact('contacts'));
    }

public function view($id = null)
    {
    $contact = $this->Contacts->get($id, [
        'contain' => ['Users', 'Contacts', 'SourceProspects', 'Status', 
    'Secteurs', 'Products', 'Leads', 'Accounts']
    ]);

    $this->set('contact', $contact);
   }

ContactsTable.php

$this->setTable('contacts');
    $this->setDisplayField('name');
    $this->setPrimaryKey('id');

    $this->addBehavior('Timestamp');

    $this->belongsTo('Users', [
        'foreignKey' => 'user_id'
    ]);
    $this->belongsTo('Contacts', [
        'foreignKey' => 'contact_type_id'
    ]);
    $this->belongsTo('Leads', [
        'foreignKey' => 'lead_id'
    ]);
    $this->belongsTo('SourceProspects', [
        'foreignKey' => 'source_prospect_id'
    ]);
    $this->belongsTo('Accounts', [
        'foreignKey' => 'account_id'
    ]);
    $this->belongsTo('Status', [
        'foreignKey' => 'statut_id'
    ]);
    $this->belongsTo('Secteurs', [
        'foreignKey' => 'secteur_id'
    ]);
    $this->belongsTo('Products', [
        'foreignKey' => 'product_id'
    ]);
    $this->hasMany('Accounts', [
        'foreignKey' => 'contact_id'
    ]);
    $this->hasMany('Leads', [
        'foreignKey' => 'contact_id'
    ]);
}

1 Ответ

0 голосов
/ 28 мая 2018

Кажется, проблема здесь в ContractsTable

$this->belongsTo('Contacts', [
    'foreignKey' => 'contact_type_id'
]);

. Таким образом, торт соединяет таблицу контактов с самим собой, поэтому создание неуникального псевдонима

возможно, является просто опечаткой, и вы хотеличтобы сделать

$this->belongsTo('ContactTypes', [
    'foreignKey' => 'contact_type_id'
]);

, но если вы действительно хотите использовать это отношение, то вам нужно создать псевдоним объединенной таблицы контактов

$this->belongsTo('ParentContacts', [ // choose your alias here
    'className' => 'Contacts'
    'foreignKey' => 'contact_type_id'
]);

, поэтому каждый раз, когда вам нужно обратиться к объединенной таблице, выможет сделать что-то вроде

'contain' => [
    ..., 
   'ParentContacts', 
 ],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...