Альтернатива результатов синтаксического анализа CakePHP - PullRequest
0 голосов
/ 18 мая 2011

У меня есть запрос, который возвращает МНОГО результатов, и мой код исчерпывает память, пытаясь проанализировать результаты ... как я могу выполнить запрос в CakePHP и просто получить нормальные результаты?

Под парсингом я имею в виду ....

SELECT table1.*, table2.* FROM table1 INNER JOIN table2 ON table1.id = table2.table1_id

С помощью вышеприведенного запроса он вернется ....

array(
   0 => array(
       'table1' => array(
            'field1' => value,
            'field2' => value
       ),
       'table2' => array(
            'field1' => value,
            'field2' => value
       )
   )
)

Когда он анализирует эти результаты во вложенных массивах, это когда ему не хватает памяти .... как мне избежать этого?

Я не мог ненавидеть CakePHP больше, чем сейчас: - \ Если документация была приличной, это было бы одно, но это не прилично, и ее функциональность раздражала.

Ответы [ 3 ]

0 голосов
/ 18 мая 2011

Я бы посоветовал вам использовать поведение Containable в вашей модели. Это самый простой способ контролировать количество возвращаемых данных. Я уверен, что это именно то, что вам нужно реализовать.

CakePHP :: Containable :: Основные характеристики

0 голосов
/ 19 мая 2011

Вы должны ограничить количество строк, возвращаемых вашим запросом (например, 500 строк), и позволить пользователю извлекать больше строк при необходимости (следующие 500 строк за раз).Вы можете сделать это красиво с компонентом нумерации страниц и немного AJAX.

0 голосов
/ 18 мая 2011

вы могли бы сделать:

$list = $this->AnyModel->query("SELECT * FROM big_table");

но я не думаю, что это решит вашу проблему, потому что, если у вас есть, например, 10-миллионные строки ... php не сможет управлять массивом из 10-миллионных значений...

но вы можете прочитать эти две ссылки, чтобы изменить время выполнения и ограничение памяти .. вы также можете изменить их на своем php.ini

Удачи!

РЕДАКТИРОВАНИЕ хм, благодаря вашему вопросу я кое-что узнал: P Прежде всего, мы все согласны, что вы получаете эту ошибку, потому что Cakeвыполняет запрос и пытается сохранить результаты в одном массиве, но php не поддерживает такой большой массив, поэтому у него не хватает памяти и происходит сбой. Я никогда не использовал классическую mysql_query () (я предпочитаю PDO), но после прочтенияДокументы, похоже, что mysql_query хранит результаты в ресурсе , поэтому он не загружает результаты в память, и это позволяет вам зацикливать результаты (например, зацикливание большого файла).Итак, теперь я вижу разницу ... и ваш вопрос на самом деле, вот этот:

Могу ли я остановить CakePHP, извлекающий все строки для запроса?

=) iпонимаю ваше разочарование по поводу торта, иногда я также расстраиваюсь из-за этого (можете ли вы поверить, что нет простого способа выполнить запрос с предложением HAVING ?? u_U)

Cheers!

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