刚上手yii,对框架结构不是很了解.
昨天做了一个mysql的视图,用gii建立了model,创建crud的时候提示没有主键,于是只创建了Controller,然后从别的控制器里复制了一个list,用于显示,大体结构如下:
public function actionList()
{
$start = $_GET['start'];
$limit = $_GET['limit'];
$dataProvider=new CActiveDataProvider('Fvl',array(
'criteria'=>array(
'select'=>'*',
'with'=>array('author','goods','region',),
),
'pagination'=>array(
'currentPage'=>$start/8,
'pageSize'=>$limit,
)));
$totalCount = $dataProvider->getTotalItemCount();
$r=new BaseObject();
$r->totalCount=$totalCount;
$data=array();
foreach ($dataProvider->data as $m)
{
$item=array();
$item["id"]=$m->fvfvx;
$item["pid"]=$m->blptx;
$item["market"]=$m->region->regionname;
$item["product"]=$m->goods->goodsname;
$item["time"]=$m->fvtime;
$item["opertor"]=$m->author->name;
$data[]=$item;
}
$r->data=$data;
echo CJSON::encode( $r );
}
然后执行的时候,爆出一个错误:
PHP warning
Invalid argument supplied for foreach()
F:\blu10ph\php\htdocs\YiiWebBase\yii\framework\db\ar\CActiveFinder.php(784)
772 {
773 // determine the primary key value
774 if(is_string($this->_pkAlias)) // single key
775 {
776 if(isset($row[$this->_pkAlias]))
777 $pk=$row[$this->_pkAlias];
778 else // no matching related objects
779 return null;
780 }
781 else // is_array, composite key
782 {
783 $pk=array();
784 foreach($this->_pkAlias as $name=>$alias)
785 {
786 if(isset($row[$alias]))
787 $pk[$name]=$row[$alias];
788 else // no matching related objects
789 return null;
790 }
791 $pk=serialize($pk);
792 }
793 /*else if(is_array($this->_pkAlias)) // is_array, composite key
794 {
795 $pk=array();
796 foreach($this->_pkAlias as $name=>$alias)
然后我修改了下代码:
else if(is_array($this->_pkAlias)) // is_array, composite key
{
$pk=array();
foreach($this->_pkAlias as $name=>$alias)
{
if(isset($row[$alias]))
$pk[$name]=$row[$alias];
else // no matching related objects
return null;
}
$pk=serialize($pk);
}else{
$pk=array();
$pk=serialize($pk);
var_dump($this->_pkAlias);
exit;
}
页面输出是null,看来这里$this->_pkAlias还有种可能是null,所以我就修改了这个判断:
/*else // is_array, composite key
{
$pk=array();
foreach($this->_pkAlias as $name=>$alias)
{
if(isset($row[$alias]))
$pk[$name]=$row[$alias];
else // no matching related objects
return null;
}
$pk=serialize($pk);
}*/
else if(is_array($this->_pkAlias)) // is_array, composite key
{
$pk=array();
foreach($this->_pkAlias as $name=>$alias)
{
if(isset($row[$alias]))
$pk[$name]=$row[$alias];
else // no matching related objects
return null;
}
$pk=serialize($pk);
}else{ // is_null
$pk=array();
$pk=serialize($pk);
}
这样页面上倒是返回数据了,但是通过视图出来的应该有四条,这个结果只有一条,感觉应该还是和(数据来源是视图并且没有主键)有关系,搜索了下yii关于数据库中的视图,没找到满意的答案,不知道大家能不能帮我看下怎么解决从数据库的视图获取数据的问题?~