如何迭代数据提供程序对象?我希望访问返回的每一行的“名称”字段,并构建一个列表。你能帮上忙吗?
表/模型categories的表结构
CREATE TABLE IF NOT EXISTS `categories` (
`idCategory` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`idCategory`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=55 ;*我的控制器Categories*中的函数
$names = array();
public function returnCategoryNames()
{
$dataProvider= new CActiveDataProvider('Categories');
$dataProvider->setPagination(false);
$count = $dataProvider->totalItemCount();
for($i = 0; $i < $count; $i++){
// this is where I am lost...
$myname = $dataProvider->data[$i]->name;
array_push($names, $myname);
}
return $names;
}发布于 2012-08-29 02:43:20
试试这个:
public function returnCategoryNames()
{
$dataProvider= new CActiveDataProvider('Categories');
$dataProvider->setPagination(false);
//$count = $dataProvider->totalItemCount();
$names = array();
foreach($dataProvider->getData() as $record) {
$names[] = $record->name;
}
return array_unique($names);
}但是,您不需要使用数据提供程序,而只需使用模型
foreach(Categories::model()->findAll() as $record) {发布于 2014-11-30 18:18:47
在Yii2中,这种情况也发生了变化:
$searchModel = new ModelSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
foreach($dataProvider->getModels() as $record) {
echo $record->id . '<br>';
}
exit();参考资料:getModels()
发布于 2013-07-23 13:53:11
使用@ben的解决方案,您将同时查询所有行。你可能会有记忆问题。
使用以下解决方案,您将从10乘10(默认的CPagination.pageSize值)获取类别:
$dataProvider = new CActiveDataProvider('Categories', array(
'pagination' => array(
'validateCurrentPage' => false
),
));
$pagination = $dataProvider->pagination;
while ($categories = $dataProvider->getData(true)){
foreach ($categories as $category) {
//...
}
$pagination->currentPage++;
}https://stackoverflow.com/questions/12170102
复制相似问题