PDA

View Full Version : مشکل با CGridView



under22
چهارشنبه 14 اسفند 1392, 13:43 عصر
من با ویجت CGridView داده ها رو از مدل با استفاده از متد search میگیرم که در متد search کد های من به این شکل است .


public function search()
{// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->compare('description',$this->description,true);
$criteria->with = array('categoreis');
$criteria->compare('categoreis.name',$this->categoreis_search, true);
$criteria->compare('price',$this->price);
$criteria->compare('pic',$this->pic,true);
$criteria->compare('count',$this->count);
$criteria->compare('create_date',$this->create_date,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'categoreis_search'=>array(
'asc'=>'categoreis.name',
'desc'=>'categoreis.name DESC',
),
'*',
),
),
'pagination'=>array(
'pageSize'=>5,
),
)
);
}

و داخل ویو هم کد های من به این شکل است


<?php
Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
$('.search-form').toggle();
return false;
});
$('.search-form form').submit(function(){

$('#product-grid').yiiGridView('update', {

data: $(this).serialize()
});

return false;
});
");
?>


<h1>Manage Products</h1>


<p>
You may optionally enter a comparison operator (<b>&lt;</b>, <b>&lt;=</b>, <b>&gt;</b>, <b>&gt;=</b>, <b>&lt;&gt;</b>
or <b>=</b>) at the beginning of each of your search values to specify how the comparison should be done.
</p>


<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php
$this->renderPartial('_search',array(
'model'=>$model,
)); ?>
</div><!-- search-form -->


<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'product-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'name',
'description',
'price',
'pic',
'count',
'create_date',
array('header'=>'categories','name' => 'categoreis_search', 'value' => '$data->categoreis->name'),
array(
'class'=>'CButtonColumn',
),
),
));
?>

و داخل کنترلر


public function actionIndex()
{
$model=new Product('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Product']))
$model->attributes=$_GET['Product'];


$this->render('index',array(
'model'=>$model
));
}

وقتی در داخل cgridview سرچ رو بر اساس فیلدی که خودم اضافه کردم انجام میدم به درستی کار میکنه ولی وقتی سرچ رو بر اساس فیلد های دیگه انجام میدم این error رو به من میده


Error 500: <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous. The SQL statement executed was: SELECT COUNT(DISTINCT `t`.`id`) FROM `tbl_product` `t` LEFT OUTER JOIN `tbl_categoreis` `categoreis` ON (`t`.`categoreis_id`=`categoreis`.`id`) WHERE (id=:ycp0) (C:\xampp\htdocs\yii\framework\db\CDbCommand.php:5 43)</p><pre>#0 C:\xampp\htdocs\yii\framework\db\CDbCommand.php(43 3): CDbCommand->queryInternal('fetchColumn', 0, Array)
#1 C:\xampp\htdocs\yii\framework\db\ar\CActiveFinder. php(759): CDbCommand->queryScalar()
#2 C:\xampp\htdocs\yii\framework\db\ar\CActiveFinder. php(151): CJoinElement->count(Object(CDbCriteria))
#3 C:\xampp\htdocs\yii\framework\db\ar\CActiveRecord. php(1605): CActiveFinder->count(Object(CDbCriteria))
#4 C:\xampp\htdocs\yii\framework\web\CActiveDataProvi der.php(228): CActiveRecord->count(Object(CDbCriteria))
#5 C:\xampp\htdocs\yii\framework\web\CDataProvider.ph p(224): CActiveDataProvider->calculateTotalItemCount()
#6 C:\xampp\htdocs\yii\framework\web\CActiveDataProvi der.php(178): CDataProvider->getTotalItemCount()
#7 C:\xampp\htdocs\yii\framework\web\CDataProvider.ph p(168): CActiveDataProvider->fetchData()
#8 C:\xampp\htdocs\yii\framework\zii\widgets\CBaseLis tView.php(111): CDataProvider->getData()
#9 C:\xampp\htdocs\yii\framework\zii\widgets\grid\CGr idView.php(339): CBaseListView->init()
#10 C:\xampp\htdocs\yii\framework\web\CBaseController. php(147): CGridView->init()
#11 C:\xampp\htdocs\yii\framework\web\CBaseController. php(172): CBaseController->createWidget('zii.widgets.gri...', Array)
#12 C:\xampp\htdocs\test\protected\views\site\index.ph p(52): CBaseController->widget('zii.widgets.gri...', Array)
#13 C:\xampp\htdocs\yii\framework\web\CBaseController. php(126): require('C:\xampp\htdocs...')
#14 C:\xampp\htdocs\yii\framework\web\CBaseController. php(95): CBaseController->renderInternal('C:\xampp\htdocs...', Array, true)
#15 C:\xampp\htdocs\yii\framework\web\CController.php( 869): CBaseController->renderFile('C:\xampp\htdocs...', Array, true)
#16 C:\xampp\htdocs\yii\framework\web\CController.php( 782): CController->renderPartial('index', Array, true)
#17 C:\xampp\htdocs\test\protected\controllers\SiteCon troller.php(37): CController->render('index', Array)
#18 C:\xampp\htdocs\yii\framework\web\actions\CInlineA ction.php(49): SiteController->actionIndex()
#19 C:\xampp\htdocs\yii\framework\web\CController.php( 308): CInlineAction->runWithParams(Array)
#20 C:\xampp\htdocs\yii\framework\web\CController.php( 286): CController->runAction(Object(CInlineAction))
#21 C:\xampp\htdocs\yii\framework\web\CController.php( 265): CController->runActionWithFilters(Object(CInlineAction), Array)
#22 C:\xampp\htdocs\yii\framework\web\CWebApplication. php(282): CController->run('')
#23 C:\xampp\htdocs\yii\framework\web\CWebApplication. php(141): CWebApplication->runController('site')
#24 C:\xampp\htdocs\yii\framework\base\CApplication.ph p(180): CWebApplication->processRequest()
#25 C:\xampp\htdocs\test\index.php(13): CApplication->run()
#26 {main}</pre>

میشه کمک کنید

MMSHFE
چهارشنبه 14 اسفند 1392, 14:09 عصر
چون از Join دارین استفاده میکنید، توی جستجو به مشکل نامفهوم بودن فیلد id برخورد کرده چون هم جدول اصلی و هم جدول categories فیلد id دارن. یا توی search به جای id بنویسید t.id یا اینکه تو قسمت with با پارامتر together'=>false' مجبورش کنید Join نزنه.

under22
چهارشنبه 14 اسفند 1392, 14:29 عصر
ممنون کارتون فوق العادس
اول
together'=>false' رو کردم ولی جواب نداد ولی بعدش وقتی از t استفاده کردم درست شد

under22
چهارشنبه 14 اسفند 1392, 15:27 عصر
من اگه بخام داخل دیتا گیرید بر اساس یک ستون خواست sort کنم باید چیکار کنم؟

MMSHFE
چهارشنبه 14 اسفند 1392, 15:30 عصر
با تنظیم خاصیت order از Criteria توی متد search میتونید انجام بدین. اینجا (http://www.yiiframework.com/doc/api/1.1/CDbCriteria) رو ببینید.