我是cakePHP的初学者。获得以下错误
错误:在非对象文件上调用成员函数find(): /var/www/html/cakephp/app/Model/Post.php
行:11
关于错误有很多相关的帖子,但是我无法通过引用它来跟踪问题。
我的模特Post.php
<?php
class Post extends AppModel {
public $validate = array(
'title' => array('rule' => 'notBlank'),
'body' => array('rule' => 'notBlank'));
public $belongsTo = 'Category';
public function actual(){
return $this->Post->find('all', array('conditions' => array('Post.deleted' => 0)));
}
}
?>
我在Controller中的index()
public function index()
{
$actual = $this->Post->actual();
$this->Post->recursive = 0;
$this->paginate = array ('limit' => 5);
$this->set('actuals', $this->paginate());
}
我正在尝试实现软删除逻辑。如果用户单击“删除”,则数据库中已删除列中的标志将更改为1以获取相应的数据。因此,通常我必须显示删除= 0的数据。
我能够通过在索引视图中添加if条件来实现它,但这很不方便,我想在Model本身过滤数据(如果可能的话) 任何帮助将不胜感激。谢谢
更新 在我的模型中,我改变了
return $this->Post->find
到
return $this->find
现在错误消失了,但它显示了所有数据,甚至是已删除的数据!
答案 0 :(得分:1)
您的模型帖子是正确的,但它在控制器中不正确。
解决方案1 [简单]:
型号:不变。功能&#39;实际&#39;可用于其他目的,但在这种情况下不需要。
控制器:
public function index()
{
$this->Post->recursive = 0;
$this->paginate = array (
'limit' => 5,
'conditions' => array(
array('Post.deleted' => 0)
)
);
$this->set('actuals', $this->paginate());
}
解决方案2:
型号:
<?php
class Post extends AppModel {
public $findMethods = array('actuals' => true);
public $validate = array(
'title' => array('rule' => 'notBlank'),
'body' => array('rule' => 'notBlank'));
public $belongsTo = 'Category';
protected function _findActuals($state, $query, $results = array()){
if ($state === 'before') {
$query['conditions']['Post.deleted'] = false;
return $query;
}
return $results;
}
}
?>
控制器:
public function index()
{
$this->Post->recursive = 0;
$this->paginate = array ('limit' => 5, 'findType' => 'actuals');
$this->set('actuals', $this->paginate());
}
答案 1 :(得分:0)
终于得到了输出
public function index()
{
$this->Post->recursive = 0;
$this->Paginator->settings = array('conditions' => array('Post.deleted' => 0),'limit' => 5);
$this->set('actuals', $this->Paginator->paginate());
}
上述更改给了我一个正常的输出,但仍未能在模型中过滤数据。如果您认为这也方便,请告诉我,我想学习高效编码:)谢谢!