Получить данные из связанной базы данных в CakePHP - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть таблица Entries с users_id в качестве внешнего ключа к таблице Users .

Я установил ассоциацию ownTo в EntriesTable следующим образом:

$this->belongsTo('Users', [
    'foreignKey' => 'user_id',
    'joinType' => 'INNER'
]);

После этого я написал это в EntriesController:

$entries = TableRegistry::get('Entries');
$query = $entries->findByTitle($title)
    ->contain(['Users']);
$entry = $query->first();
$this->set('entry', $entry);

В шаблоне VIEW записей я должен показать поле username пользователя, которыйнаписал запись.

Мне известно, что в предыдущих версиях CakePHP 1 я мог просто написать $ entry ['User'] ['username'] , чтобы получить имя пользователя пользователя.кто написал запись.Теперь, когда я использую CakePHP 3.6, он не работает.Как мне выполнить ту же задачу в CakePHP 3?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Таким образом, в cakephp вы загружали Модель его контроллера, что делается по умолчанию, вы можете напрямую создать метод find () в том же контроллере, если вы хотите найти из другой таблицы / модели, которую вы можете сделать, это-

а. $ This-> Entries-> otherTableName () -> находка () -> все ();

б. $ tableName = $ this-> loadModel ('tableName'); $ TableName-> найти ();

0 голосов
/ 13 ноября 2018

Вы можете написать как ниже

В контроллере

public function view($title)
{
    $entry = $this->Entries->findByTitle($title)->contain(['Users']);
    $entry = $entry->first();
    $this->set('entry', $entry);
}

ИЛИ

public function view($title)
{
    $query = $this->Entries->find('all', [
        'where' => ['Entries.title' => $title],
        'contain' => ['Users']
    ]);
    $entry = $query->first();

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

В поле зрения

<?= $entry->user->username ?>
...