Allowed memory no filter do CGridView

Olá a todos,

Estou com um problema digamos que ‘grande’ hehe

Tenho uma tabela com mais de 7.000 registro.

Hoje começou a dar problema na listagem do registro no ‘filter’ do CGridView, o erro é o seguinte:




[30-Sep-2010 10:05:00] PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 24 bytes) in /home/xxxx/yiilite.php on line 7678



e filtro é o seguinte:




array(

            'name' => 'codpaciente',

            'filter' => CHtml::listData(Paciente::model()->findAll(), 'codpaciente', 'codigoNome'),

            'value' => 'Paciente::model()->findByPk($data->codpaciente)->codigoNome',

            'header' => 'Paciente',

            'headerHtmlOptions' => array(

                'nowrap' => 'nowrap',

                'class' => 'ui-widget-header',

            ),

            'htmlOptions' => array(

                'nowrap' => 'nowrap',

            ),

        ),



Quando eu comento o ‘filter’ ele volta a funcionar, na real na hora que acessa essa página, ele dá um lag de uns 5s pra carregar esse <select> com mais de 7mil registro

Alguma solução? Sem setar set_time_limit, e memory_limit, o memory_limit no php.ini ta 32M, já setei no ini_set() até 256MB e não solucionou.

Hum, eu não uso estes filtros. Normalmente deixo fora do Grid, mas, acho que 7000 registros pra um select(A tag) é muita coisa.

Será que não da pra usar um autocomplete ai não???

Pelo que eu ví, da pra fazer sem filtro e gerar um autocomplete com javascript puro, mas fica meio gambiarra.

Então, 7000 e muita coisa mesmo hehe

E o pior disso que no formulário de atendimento tem esse <select> agora que lembrei, depois vou até ver!

Acho que vou deixar o <input> mesmo, por que o Grid é dinâmico!

Ai se ela quizer procurar é só digitar o nome e ENTER.

Só que tem uns topeira acha que isso fica mais viável para localizar o cliente, eu tinha deixado o <input> ai pediram pra colocar o <select>, deu no que deu hehehe

Mais valeu, vou lá ver o formulário, senão já recebo email de reclamação!

Acho que vc pode fazer o seguinte, usar esse input ai comum, e usar o autocomplete com javascript puro do jquery ui (se vc usa o Jquery ui no seu projeto)

vc pode importar os js usando Yii::app()->clientScript->registerCoreScript(); pra importar os javascripts dele que já vem com o Yii.

Pra ver as libs do JQuery ui e seus nomes pra poder importar, vc pode olhar o arquivo \framework\web\js\packages.php dentro da pasta do framework.

E fazer o javascript de chamada na mão seguindo a documentação oficial. http://jqueryui.com/demos/autocomplete/

Não tentei, mas acho que vai funcionar numa boa.

Ou criar uma nova classe baseada no CGridColumn e usar no seu grid pra fazer isso pra vc.

Hoje resolvi colocar de volta ao normal, volto a funcionar! Vou dar uma olhada no phpinfo(), se houve alteração, Daniel, eu não vou me preocupar muito não, por que esses sistema ta online para o cliente testar, ele vai ser instalado localmente, com um servidor apache.

Mais vou guardar essa dica para futuros projetos, vai que volta o problema com novos clientes.