Связывание таблиц между двумя моделями в CakePHP

Я хочу получить этот результат: Нажмите «Мне» (получите ссылку, чтобы перейти к другой сопоставимой таблице)

Я следую официальному руководству cakephp для объединения таблиц вместе, но он не работает.

Моя база данных выглядит так:

Таблица ciudades:

| id (int 4) PK | nombreCiudad (varchar 60) |

Настольные комплектующие:

| idComplejo (int 11) PK | nombre (varchar 25) | ciudad_id (int 4) FK |

Полный столбец ciudad в моей таблице дополнений пуст, когда я хочу показать имя другой модели asociation (ciudad nombreCiudad). Я хочу показать имя, а не Ид Сьюдад. Здесь вы можете увидеть пустой столбец: Click Me 2

Когда я хочу показать результат, в index.ctp "$ complejo-> имеет ('ciudad')" возвращает false:

<table cellpadding="0" cellspacing="0"> <thead> <tr> <th><?= $this->Paginator->sort('idComplejo') ?></th> <th><?= $this->Paginator->sort('nombre') ?></th> <th><?= $this->Paginator->sort('ciudad_id') ?></th> <th class="actions"><?= __('Actions') ?></th> </tr> </thead> <tbody> <?php foreach ($complejos as $complejo): ?> <tr> <td><?= $this->Number->format($complejo->idComplejo) ?></td> <td><?= h($complejo->nombre) ?></td> <td><?= $complejo->has('ciudad') ? $this->Html->link($complejo->ciudad->nombreCiudad, ['controller' => 'Ciudades', 'action' => 'view', $complejo->ciudad->id]) : '' ?></td> <td class="actions"> <?= $this->Html->link(__('View'), ['action' => 'view', $complejo->idComplejo]) ?> <?= $this->Html->link(__('Edit'), ['action' => 'edit', $complejo->idComplejo]) ?> <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $complejo->idComplejo], ['confirm' => __('Are you sure you want to delete # {0}?', $complejo->idComplejo)]) ?> </td> </tr> <?php endforeach; ?> </tbody> </table> 

Здесь вы можете увидеть взаимосвязь между ciudades и дополнениями ComplejosTable.php

 public function initialize(array $config) { parent::initialize($config); $this->table('complejos'); $this->displayField('idComplejo'); $this->displayField('nombre'); $this->belongsTo('Ciudades', [ 'foreignKey' => 'ciudad_id', 'joinType' => 'INNER' ]); } public function buildRules(RulesChecker $rules) { $rules->add($rules->existsIn(['ciudad_id'], 'Ciudades')); return $rules; } 

И вот CiudadesTable.php

 ... public function initialize(array $config) { parent::initialize($config); $this->table('ciudades'); $this->displayField('nombreCiudad'); $this->primaryKey('id'); $this->addBehavior('Timestamp'); $this->hasMany('Complejos', [ 'foreignKey' => 'ciudad_id' ]); } 

Наконец, в моем ComplejosController у меня есть:

 public function index() { $this->paginate = [ 'contain' => ['Ciudades'] ]; $this->set('complejos', $this->paginate()); $this->set('_serialize', ['complejos']); } 

Что я могу сделать для решения моей проблемы? Спасибо за помощь.

просто измените ciudad для ciudade

 <td><?= $complejo->has('ciudade') ? $this->Html->link($complejo->ciudade->nombreCiudad, ['controller' => 'Ciudades', 'action' => 'view', $complejo->ciudade->id]) : '' ?></td> 

Для CakePhp, единственного числа Ciudades, является Ciudade not Ciudad

Ваш:

 <th><?= $this->Paginator->sort('user_id') ?></th> 

Кажется, ссылается на user_id, который недоступен в вашей CiudadesTable . Вы можете изменить его на

  <th><?= $this->Paginator->sort('ciudad_id') ?></th>