Php Foreach使用Yii ActiveRecord通过一个大表;“内存不足”;错误

Php Foreach使用Yii ActiveRecord通过一个大表;“内存不足”;错误,php,sql,yii,out-of-memory,cactivedataprovider,Php,Sql,Yii,Out Of Memory,Cactivedataprovider,我有一个关于Yii框架的网站,我想搜索一个匹配单词的表格 我总是发现“内存不足”(这是一个大表) 我尝试了这段代码,但它一直在加载页面 $dataProvider = new CActiveDataProvider('Data'); $iterator = new CDataProviderIterator($dataProvider); foreach($iterator as $data) { echo $data->name."\n"; } 因此,我尝试了这段代码,但它一直

我有一个关于Yii框架的网站,我想搜索一个匹配单词的表格

我总是发现
“内存不足”
(这是一个大表)

我尝试了这段代码,但它一直在加载页面

$dataProvider = new CActiveDataProvider('Data');
$iterator = new CDataProviderIterator($dataProvider);
foreach($iterator as $data) {
    echo $data->name."\n";
}
因此,我尝试了这段代码,但它一直将结果限制为10:

$dataProvider = new CActiveDataProvider('Data');
$iterator = new CDataProviderIterator($dataProvider);
foreach($dataProvider as $data) {
    echo $data->name."\n";
}
如果我这样做,我会得到“内存不足”的信息:


我不知道为什么您需要在一个页面中加载所有搜索结果,但您可以通过此代码(并使用分页)将每页的项目数更改为所需的值:


这里有更多的例子,对于大数据集使用CActiveDataProvider是不明智的。特别是如果您只想对其执行后台任务。 建议使用直接SQL并从那里开始

根据对CreatoR答案的评论,您试图在一个大表中查找大量事件。例如:

$connection=Yii::app()->db;
$sql = "SELECT id FROM data WHERE field1 LIKE '%someValue%' OR field2 LIKE '%someValue%' OR field3 LIKE '%someValue%'";
$command=$connection->createCommand($sql);
$numberOfRestuls=$command->execute();
//if you also want to display the results :
$ids=$command->queryAll();
$criteria=new CDbCriteria;
$criteria->addInCondition('id',$ids,'OR');
$dataProvider = new CActiveDataProvider('Data', $criteria);
//etc

我不需要显示所有结果,我只想检查所有行中是否有匹配的单词,你有更好的方法吗?我可能会读到,为了得到正确的结果,您需要构建正确的搜索sql。您可以在
标准中执行此操作
您可以给我一个示例吗?thanx非常感谢,我可以这样做:从3列中一起搜索匹配的单词,并显示匹配单词的计数吗?我错过了
CDATA ProviderIterator
。更正。存储在
$iterator->totalItemCount
$dataProvider = new CActiveDataProvider('Data' array(
    'criteria'=>array(
        'order'=>'id DESC',
        'condition' => 'town LIKE :search_town AND FK_country > :country_id',
        'params' => array(':search_town' => $search_town.'%', ':country_id' => 10)
    ),
     'pagination' => array(
         "pageSize" => 100,
         //"currentPage" => 0, //using for pagination
     )
));
$iterator = new CDataProviderIterator($dataProvider);
foreach($iterator as $data) {
     echo $data->name."\n";
}
$connection=Yii::app()->db;
$sql = "SELECT id FROM data WHERE field1 LIKE '%someValue%' OR field2 LIKE '%someValue%' OR field3 LIKE '%someValue%'";
$command=$connection->createCommand($sql);
$numberOfRestuls=$command->execute();
//if you also want to display the results :
$ids=$command->queryAll();
$criteria=new CDbCriteria;
$criteria->addInCondition('id',$ids,'OR');
$dataProvider = new CActiveDataProvider('Data', $criteria);
//etc