Yii,php foreach错误

时间:2015-04-27 01:16:41

标签: php mysql yii foreach

我有这一行来查询我需要的东西,在一个名为Payment.php的模型的函数中,

$sIDs = Yii::app()->db->createCommand('SELECT service_id FROM booking WHERE DATE_FORMAT(date, "%m-%Y") = "06-2015" AND complete = 1 AND service_id IS NOT NULL')->queryAll();

然后我的foreach遍历$sIDs的数组列表:

foreach ($sIDs as $sID){
        $serMod = Service::model()->findByPk($sID); //This is line 45
        $serPrice = $serMod->defaultPrice; 
        $serviceIncome += $serPrice; 
}

不幸的是,它显示了一个错误:

  

致命错误:班级'服务'在 F:\ xampp \ htdocs \ wellness \ protected \ models \ Payment.php 中找不到 45

     

致命错误: Class' CListIterator'在 F:\ xampp \ htdocs \ yii \ framework \ collections \ CList.php 中找不到 90

我已经通过互联网搜索,查看了foreach的语法,但我已经拥有了正确的语法。是否有一点我可能遗漏了?请指导我,谢谢。

修改

经过进一步调试后,我一直在使用PHPExcel这一行:

spl_autoload_unregister(array('YiiBase','autoload'));   

这基本上禁用任何调用Yii函数或任何东西的东西。

4 个答案:

答案 0 :(得分:1)

问题不在public class Tunnel extends LinearLayout implements View.OnTouchListener { Paint paint = new Paint(); TextView tv; public Tunnel(Context context) { super(context); setOnTouchListener(this); setWillNotDraw(false); tv = new TextView(getContext()); tv.setX(450); tv.setY(800); tv.setTextSize(20f); tv.setTextColor(Color.WHITE); addView(tv); } @Override public void onDraw(Canvas canvas) { paint.setColor(Color.RED); for (int x = 0; x < canvas.getWidth(); x++) { canvas.drawLine(x, (float) upperBound(x), x, (float) lowerBound(x), paint); } setBackgroundColor(Color.BLACK); } private double upperBound(double x) { return 50 * Math.sin(x / 50) + 400; } private double lowerBound(double x) { return 50 * Math.sin(x / 50) + 600; } @Override public boolean onTouch(View v, MotionEvent event) { return false; } } ,而是找不到类,

由于我没有看到在foreach周期之前加载的代码,我无法告诉你为什么没有找到foreach。 试着解决这个问题。如果您这样做,请尝试Servicevardump课程,以便更好地了解其中包含的内容

答案 1 :(得分:0)

我认为您必须检查数据库的一致性。我的意思是检查表格预订中是否有一些记录表服务中没有service_id密钥(可能这是模型服务背后的表)。您可以通过以下查询来检查:

SELECT service_id FROM booking WHERE (service_id IS NOT NULL ) AND service_id NOT IN ( SELECT service_id FROM service );

另外我认为你必须提到这样的行:

$serMod = Service::model()->findByPk($sID['service_id']);

因为事件在查询中只有一列,QueryAll会以一维数组的数组返回它。

答案 2 :(得分:0)

我一直在使用PHPExcel这一行:

spl_autoload_unregister(array('YiiBase','autoload'));   

因此,当然,调用需要其他模型的函数将被禁用。例如,将禁用调用函数来创建模型Servce::model()->findByPk()

因此,在上面的行之前执行适当的功能并将其附加到变量。现在,您可以在控制器的操作中的任何位置使用它。

答案 3 :(得分:0)

嗨这是获取excel报告.Yii在PHP脚本执行完毕后正在寻找CList.php文件

spl_autoload_unregister(array('YiiBase','autoload'));

这允许PHPExcel正确执行并填充httpRequest

一旦我弄明白,问题的解决方案就相当简单了

$phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.Classes'); //get path for PHPExcel

spl_autoload_unregister(array('YiiBase','autoload')); 
include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
//do PHPExcel operations: load file, parse and create array, echo JSON array
spl_autoload_register(array('YiiBase','autoload')); //reload Yii before 

参考:Using XMLHttpRequest object to PHP, responseText is correct array, but 500 error thrown. Cannot identify cause of error