Вызов функции-члена find () для необъекта — cakeStack Overflow

Я новичок в 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

Теперь ошибка исчезла, но она показывает все данные, даже удаленные!

0

Решение

Ваш модельный пост правильный, но не корректный в контроллере.

Решение 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());
    }
    

Ref: Cakephp 2.x — Пользовательские типы поиска

1

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

Наконец получил выход

public function index()
{
$this->Post->recursive = 0;
$this->Paginator->settings = array('conditions' => array('Post.deleted' => 0),'limit' => 5);
$this->set('actuals', $this->Paginator->paginate());
}

Вышеуказанные изменения дали мне нормальный вывод, но я все еще не смог отфильтровать данные в модели. Если вы считаете, что это неудобно, дайте мне знать, я хочу научиться эффективному кодированию 🙂 спасибо!

0

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