Я хочу получить этот результат: Нажмите «Мне» (получите ссылку, чтобы перейти к другой сопоставимой таблице)
Я следую официальному руководству 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>