CakePHP загружает универсальную модель и отображает displayField

Я пытаюсь загрузить общую модель в CakePHP.

Сейчас я пытаюсь достичь того, чтобы загрузить таблицу истории и распечатать ее с помощью displayField и html-ссылкой на этот объект.

Пример-данные:

Table: History
id, model, entity_id
1 , User,  123
2 , Files, 345

Table: Users
id,  name
123, 'Steve'

Table: Files
id,  filename,   filesize
345, 'test.txt', 666

Когда я печатаю свою историю, мне нужно что-то вроде этого:

<tr>
<td>1</td>                               //id of history
<td><a href="/users/123">Steve</a></td>  //link to user
<tr>
<td>2</td>
<td><a href="/files/345">test.txt</a></td> //link to file
<tr>

Пользователь должен показать «имя», а «Файлы» — «имя файла».
Вот почему я хотел бы использовать displayField, который я установил в модели.

Я думал, что я мог бы попробовать это с этим кодом:

$this->loadModel('Users');
$this->loadModel('Files');
foreach($historyEntries as $entry){
$genericModel = $this->$entry['HistoryEntry']['model']->find('all');
}

Но этот код говорит мне, что «Users-Helper» отсутствует.
Есть идеи, как заставить это работать?

Ура!

0

Решение

Название вашей модели должно быть Userне Users, (То же самое для Files)

Изменить на

$this->loadModel('User');
0

Другие решения

Конечно.
Это почти весь код, который у меня есть:

//Files Model
App::uses('AppModel', 'Model');
class Files extends AppModel {
public $displayField = 'filename';
}

//Users Model
App::uses('AppModel', 'Model');
class Files extends AppModel {
public $displayField = 'name';
}
//History Model
App::uses('AppModel', 'Model');
class History extends AppModel {
}
//History Controller
public function index(){
$this->loadModel('Users');
$this->loadModel('Files');
$historyEntries = $this->History->find('all');
$result = array();
foreach($historyEntries as $entry){
//1. How do I load the generic Model?
$genericModel = $this->$entry['History']['model']->find('first', array('conditions' => array('Article.id' => $entry['History']['entity_id'])));
//2. How do I access the DisplayField of this generic Model
array_push($result,$genericModel['displayField']);
}
$this->set('historyEntries',$result);
}
0

По вопросам рекламы [email protected]