CakePHP находит все не устанавливающие значения для переменных. Все остальные функции поиска работают - PullRequest
0 голосов
/ 05 марта 2012

В моем контроллере у меня есть две функции, которые извлекают все записи из БД со статусом = 4. В одной функции все работает нормально. Я скопировал оператор find all из рабочей функции:

$this->set('completed', $this->Topic->find('all', array('fields' => array(
                    'Topic.creator','Topic.link','Topic.id', 'Topic.topic_name', 'Topic.info', 'Topic.priority', 'Topic.user_id',
                    'Topic.completed','Topic.created', 'Topic.status','User.name','User.id','Topic.category','Topic.tags'),'conditions' => array(
                    'Topic.status' => 4))));

Но в новой функции массив $completed, похоже, не существует. Оператор отладки - просто пустая строка. Если я отлаживаю журнал sql, используя debug($this->Topic->getDataSource()->getLog());, это будет возвращенный массив:

Array
(
[log] => Array
    (
        [0] => Array
            (
                [query] => SELECT `Topic`.`creator`, `Topic`.`link`, `Topic`.`id`, `Topic`.`topic_name`, `Topic`.`info`, `Topic`.`priority`, `Topic`.`user_id`, `Topic`.`completed`, `Topic`.`created`, `Topic`.`status`, `User`.`name`, `User`.`id`, `Topic`.`category`, `Topic`.`tags` FROM `topics` AS `Topic` LEFT JOIN `users` AS `User` ON (`Topic`.`user_id` = `User`.`id`) LEFT JOIN `events` AS `Event` ON (`Event`.`topic_id` = `Topic`.`id`)  WHERE `Topic`.`status` = 4
                [affected] => 9
                [numRows] => 9
                [took] => 0
            )

    )

[count] => 1
[time] => 0
)

Оператор SQL в журнале работает. Если я подключаюсь к MySQL, это дает результаты. И в этом поле и поле numRows показывают правильное количество записей. Но полученные данные не устанавливаются в переменные. Любые идеи очень приветствуются. Мой босс и я в тупике. Вот обе полные функции:

         public function dashboard(){
            $this->set('completed', $this->Topic->find('all', array('fields' => array(
                    'Topic.creator','Topic.link','Topic.id', 'Topic.topic_name', 'Topic.info', 'Topic.priority', 'Topic.user_id',
                    'Topic.completed','Topic.created', 'Topic.status','User.name','User.id','Topic.category','Topic.tags'),'conditions' => array(
                    'Topic.status' => 4))));
            $this->set('total_inprogress_release', $this->Topic->find('count', array('conditions' => array(
                    'OR' => array('status <>' => 4,'status <>' => 0),
                    'priority' => 4))));
    $this->set('upcoming_events', $this->Topic->Event->find('all'));
            $this->Topic->virtualFields['count'] = 'COUNT(*)';
            $this->set('graph_data', $this->Topic->find('chart', array('fields' => array('status_txt', 'priority_txt', 'count'), 'group' => array('status', 'priority'),
                    'chart' => array(
                            'xaxisTitle' => 'Status',
                            'yaxisLabels' => array('Release', 'Company', 'News'),
                            'xaxisLabels' => array('Open','In Progress','Completed'),
                            'yaxis' => 'Topic.priority_txt',
                            'xaxis' => 'Topic.status_txt',
                            'data' => 'Topic.count'
            ))));
    }

А вот неработающая функция:

        public function completed(){
            $foo = $this->Topic->find('all', array('fields' => array(
                    'Topic.creator','Topic.link','Topic.id', 'Topic.topic_name', 'Topic.info', 'Topic.priority', 'Topic.user_id',
                    'Topic.completed','Topic.created', 'Topic.status','User.name','User.id','Topic.category','Topic.tags'),'conditions' => array(
                    'Topic.status' => 4)));
            debug($foo);
            debug($this->Topic->getDataSource()->getLog());


    }

Ответы [ 2 ]

1 голос
/ 06 марта 2012

После нескольких часов отслеживания данных, пока мы не выяснили, где они были потеряны, мы обнаружили, что проблема заключалась в некоторых данных в базе данных.Он был закодирован и вызывал сброс оператора while в основных файлах тортов при обнаружении указанных данных.Решением было изменить Config/database.php следующим образом: class DATABASE_CONFIG {

    public $default = array(
            'datasource' => 'Database/Mysql',
            'persistent' => false,
            'host' => 'localhost',
            'login' => 'login',
            'password' => 'Password',
            'database' => 'database',
            'prefix' => '',
            'encoding' => 'utf8',//this line allows the database to read utf8 data.
    );

}

0 голосов
/ 06 марта 2012

Я думаю, что отношения могут быть причиной проблемы здесь. Попробуйте это в завершенной функции и pr($foo) результаты:

$foo = $this->Topic->find('all', array(
    'fields' => array(
        'Topic.creator',
        'Topic.link',
        'Topic.id', 
        'Topic.topic_name', 
        'Topic.info', 
        'Topic.priority', 
        'Topic.user_id',
        'Topic.completed',
        'Topic.created', 
        'Topic.status',
        'User.name',
        'User.id',
        'Topic.category',
        'Topic.tags'
    ),
    'conditions' => array(
        'Topic.status' => 4,
    ),
    'joins' => array(
        array(
            'table' => 'users',
            'alias' => 'User',
            'type' => 'LEFT',
            'conditions' => array(
                'Topic.user_id = User.id'
            ),
        ),
    ),
    'recursive' => -1,
));

Я подозреваю, что вы получите результаты, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...