Yii,查询给数组字符串错误

时间:2015-05-14 08:04:55

标签: php yii

$paymentIDs = Yii::app()->db->createCommand('SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL')->bindValue(':pid', $pid)->queryAll();

$total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN ('.implode(",", $paymentIDs).') AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();

以上是我的查询代码。如您所见,我根据某个标准查询payment_id(s)。我现在有一组数字。

当我执行第二个查询时,它失败了,给我一个错误

  

数组到字符串转换

我也试过这个:

$total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN ('.implode(",", $paymentIDs['payment_id']).') AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();

现在,这给我一个错误说:

  

未定义的索引:payment_id

有人可以指出我的错误吗?非常感谢您的帮助。

感谢。

3 个答案:

答案 0 :(得分:1)

第一个查询的结果$paymentIDs是一个数组数组(或普通对象,我不确定)。您可以尝试在IDE中检查它,或者只需使用var_dump查看其结构。您可以使用listData method of the CHtml class更接近您想要的内容,例如:

$ids = CHtml::listData($paymentIDs, 'payment_id', 'payment_id');

这会将您的数组展平为一个字符串数组。然后...

implode(",", $ids)

...会给你想要的结果。

答案 1 :(得分:1)

您可以使用单个查询解决此问题:

 $total = Yii::app()->db->createCommand('SELECT count(*) FROM payment WHERE id IN (SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL) AND date BETWEEN \':mS\' AND \':mE\'')->bindValue(':pid', $pid)->bindValue(':mS', $monthStart)->bindValue(':mE', $monthEnd)->queryScalar();

谢谢你:)

答案 2 :(得分:1)

  1. 您的第一个查询返回对象数组(不是payment_id s的数组)。 要获取某些列的值数组,可以使用->queryColumn()。 所以第一个查询必须是:
  2. $paymentIDs = Yii::app()->db->createCommand('SELECT payment_id FROM client_package WHERE package_id = :pid AND payment_id IS NOT NULL')->bindValue(':pid', $pid)->queryColumn()

    如果变量$monthStart$monthEnd具有string类型(或者可以转换为string的类型),则代码必须正常工作。

    1. 在第二个查询中,您可以使用bindValues代替双bindValue