Код: Выделить всё
public function actionTest()
{
$service = Service::model()->findByAttributes(array('name'=>'ServiceName'));
$sql = Yii::app()->db->createCommand('SELECT * FROM product WHERE service_id=:service_id')
->bindValue(':service_id', $service->id);
// $products = $sql->queryAll(); works fine
$provider = new CSqlDataProvider($sql, array(
'totalItemCount'=>100,
'sort'=>array(
'attributes'=>array('id'),
),
'pagination'=>array('pagesize'=>10),
));
var_dump($provider->getData());
}
- если передаю параметр в объект класса CDbCommand через bindValue, а потом этот объект передаю в $provider - то возникает ошибка когда получаю данные.
- если передаю параметры через аттрибут 'params' класса CSqlDataProvider то всё работает.
yii 1.1.14
CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound. The SQL statement executed was: SELECT * FROM product WHERE service_id=:service_id LIMIT 10. Bound with :service_id='7'
yii 1.1.15-dev
CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound. The SQL statement executed was: SELECT * FROM product WHERE service_id=:service_id LIMIT 10
Получается, если я передаю в CSqlDataProvider объект CDbCommand, для которого я предварительно сделал биндинг параметров, то эти параметры теряются. На мой взгляд неоднозначно получается, ведь в CSqlDataProvider используются теже методы bindValue и QueryAll и для подстановки и получения результата соответсвенно. Ещё смущают ответы yii логера.