Я новичок в 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)));
}
}
?>
мой индекс () в контроллере
public function index()
{
$actual = $this->Post->actual();
$this->Post->recursive = 0;
$this->paginate = array ('limit' => 5);
$this->set('actuals', $this->paginate());
}
Я пытаюсь реализовать логику мягкого удаления. Если пользователь нажимает кнопку удаления, флаг в удаленном столбце в базе данных изменится на 1 для соответствующих данных. И, следовательно, в общем, я должен отображать данные с удаленным = 0.
Я смог добиться этого, поместив условие if в мое представление индекса, но это неудобно, я хочу отфильтровать данные в самой модели (если это возможно)
Любая помощь будет оценена. Спасибо
Обновить
В моей модели я изменился
return $this->Post->find
в
return $this->find
Теперь ошибка исчезла, но она показывает все данные, даже удаленные!
Ваш модельный пост правильный, но не корректный в контроллере.
Решение 1 [Простое]:
Модель: не меняется. Функцию ‘актуальная’ можно использовать для другой цели, но в этом случае она не нужна.
контроллер:
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());
}
Наконец получил выход
public function index()
{
$this->Post->recursive = 0;
$this->Paginator->settings = array('conditions' => array('Post.deleted' => 0),'limit' => 5);
$this->set('actuals', $this->Paginator->paginate());
}
Вышеуказанные изменения дали мне нормальный вывод, но я все еще не смог отфильтровать данные в модели. Если вы считаете, что это неудобно, дайте мне знать, я хочу научиться эффективному кодированию 🙂 спасибо!