سلام
من جدولی دارم به اسم OrderProducts که تعداد محصولاتی که در هر سفارش هست رو ذخیره میکنه و سه تا فیلد داره :
order_id
product_id
quantity
دو فیلد اول به جداول مختص خودشون وصل میشن ..
چجوری میتونم جمع کل تعداد خرید های یک محصول رو بخونم ...
مثلا محصول شماره 1 یه بار 3 تا خرید داشته .. یه بار یه دونه ... در حال حاضر همون ردیف اول رو برام نشون میده یعنی 3 ..
یه فیلد public به مدل OrderProducts اضافه کنید به اسم total$ و بعد، با این کد تعداد خریدهای یه محصول رو بدست بیارین:
$total = Orderproducts::model()->find(array(
'select' => 'sum(quantity) as total',
'condition' => product_id=:pid',
'params' => array(':pid'=>$product->id),
))->total;
متاسفانه خطا میده و نمیتونم دلیلش رو پیدا کنم ..
نقل قول:Parse error: syntax error, unexpected '(', expecting ',' or ';' in C:\xampp\htdocs\mediabase\protected\controllers\ProductsController.php on line 5
سیستم انجمن بک اسلش ها رو حذف میکنه
خوب خطا داره میگه توی خط 5 ProductsController انتظار پرانتز باز نداشته. کدتون رو چک کنید.
public $total = Orderproducts::model()->find(array(
'select' => 'sum(quantity) as total',
'condition' => 'product_id=:pid',
'params' => array(':pid'=>$product->id)))->total;
این کد منه ...
خوب این اشتباهه. توی مدل فقط باید بنویسید:
public $total;
و دستوری که گفتم رو توی کنترلر بنویسید.
وقتی خطا میده، کدی که گذاشتین رو هم بنویسید. بعد این چرا داره تو خط 5 خطا میده؟ فیلد رو توی مدل تعریف کنید و دقیقاً کدی که گفتم رو توی اکشنی که میخواین جمع فروش کالاها رو داشته باشین بنویسید. خارج از متدها ننویسین.
خب این خطا مشکلش حل شد ..
حالا مشکلی که پیش اومده اینه که چیزی بر نمیگردونه ..
من فیلد total رو تعریف کردم توی مدل Orderproducts
این کد هم توی کنترلر تعریف کردم :
public function actionView($id)
{
$products = $this->loadModel($id);
Orderproducts::model()->find(array(
'select' => 'sum(quantity) as total',
'condition' => 'product_id=:pid',
'params' => array(':pid' => $products->id)))->total;
}
توی View هم با این کد سعی میکنم total رو نمایش بدم :
echo Orderproducts::model()->total;
اما چیزی بر نمیگردونه .. فقط با print_r یه 1 چاپ کرد! که البته اشتباهه ..
نه نباید اینطوری کار کنید. باید این شکلی باشه:
توی کنترلر:
public function actionView($id)
{
$model = $this->loadModel($id);
$total = Orderproducts::model()->find(array(
'select' => 'sum(quantity) as total',
'condition' => 'product_id=:pid',
'params' => array(':pid' => $products->id)
))->total;
$this->render('view', compact('model', 'total'));
}
و توی ویو:
echo $total;
خب این کار رو هم انجام دادم و این خطا رو داد :
کد:
Error 500
Undefined variable: total
متغیر total$ رو مطمئنید برای ویو فرستادین؟ اگه توی ویو، یه ویوی فرعی رو با renderPartial صدا زدین، دوباره باید total$ رو برای اونهم بفرستین.