CakePHP模型“;“成员”;与“模型”不关联;“成员”;
我正在用CakePHP制作一个PHP论坛,我很难得到一个所有成员的数组,然后在一个视图中回显它们,这是我的代码CakePHP模型“;“成员”;与“模型”不关联;“成员”;,php,cakephp,Php,Cakephp,我正在用CakePHP制作一个PHP论坛,我很难得到一个所有成员的数组,然后在一个视图中回显它们,这是我的代码 <?php App::uses('AppModel', 'Model'); class Member extends AppModel { public $validate = array( 'username' => array( 'notEmpty' => array( 'rule
<?php
App::uses('AppModel', 'Model');
class Member extends AppModel {
public $validate = array(
'username' => array(
'notEmpty' => array(
'rule' => array('notEmpty')
),
),
'password' => array(
'notEmpty' => array(
'rule' => array('notEmpty')
),
),
'email' => array(
'email' => array(
'rule' => array('email')
),
),
);
public $hasMany = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'user_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
),
'Topic' => array(
'className' => 'Topic',
'foreignKey' => 'user_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
);
}
你的问题是:
public function index(){
$this->Paginator->settings['contain'] = array('Member');
$this->set('members', $this->Paginator->paginate());
}
由于正在从members控制器调用paginate,因此默认情况下,它将尝试对成员进行分页。“包含”设置指示成员数据还应包含关联模型(也称为成员)。成员与自身之间没有关联,因此会出现错误。我假设contain设置是一个错误,所以只需删除行$this->Paginator->settings['contain']=array('Member')代码>删除该行:
$this->Paginator->settings['contain'] = array('Member');
您使用此函数导致了自联接,但您尚未在成员模型中定义该函数,您不希望这样
这也是错误的,加上您的php有一个语法错误-名称周围缺少'
<?php foreach ($members as $member): ?>
<?php echo $user[name]; ?>
<?php endforeach; ?>
应该是:
<?php foreach ($members as $member): ?>
<?php echo $member['Member']['name']; ?>
<?php endforeach; ?>
如果您正在为最基本的内容而挣扎,我建议您执行以下操作,或者至少阅读有关数据如何传递到视图以及模型关联如何工作的内容。您可以在中找到所有内容。$this->Paginator->settings['contain']=array('Member')代码>是您的问题。由于设置将作为选项传递给Member
模型上的find()调用,因此实际上要求Member
包含自身。将'contain'
设置为array()
,以防止提取任何相关记录
尽管推荐的方法是在AppModel
中将属性$recursive
设置为-1
,这样默认情况下不会提取任何相关记录。Containable然后用于根据需要获取相关记录。谢谢。我是MVC和il的新手,请务必查看这些链接。在burzum的大量帮助下,我已经修复了它,而且我还发现,无论您如何称呼控制器,只要您添加public$uses=array('Model1','Model2','Model3'),您都可以使用任何您喜欢的模型;在控制器的顶部,与其将大量模型加载到控制器中(即使它们是延迟加载的),不如通过该控制器的主模型的关联来访问其他模型。
$this->Paginator->settings['contain'] = array('Member');
<?php foreach ($members as $member): ?>
<?php echo $user[name]; ?>
<?php endforeach; ?>
<?php foreach ($members as $member): ?>
<?php echo $member['Member']['name']; ?>
<?php endforeach; ?>