CakePHP加载通用模型并回显displayField

时间:2014-11-29 16:46:02

标签: php cakephp generics model

我正在尝试在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'丢失了。 任何想法如何让这个工作?

干杯!

2 个答案:

答案 0 :(得分:0)

您的型号名称应为User,而不是Users。 (与Files相同)

更改为

$this->loadModel('User');

答案 1 :(得分: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);
}