رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
گزارش فروش محصولات (حل شد)
#1
توی فروشگاه اینترنتی برای دریافت گزارش فروش سلکت اول باید از جدولorder باشه یا orderproducts چون میخوام گزارش فروش هر کالا رو بده.
پاسخ
تشکر شده توسط:
#2
خوب شما میخواین میزان فروش هر محصول رو نمایش بدین قاعدتاً با Orders کار دارین ولی از اونجا که ازطریق جدول واسط راحتتر میشه بدست آورد، میتونید با این جدول کار کنید. مثال:
// Yii 1.1
$orderCount = Orderproducts::model()->count(array(
    'condition' => 'product_id=:productId',
    'params' => array(':product_id' => $model->id)
));

// Yii 2
$orderCount = Orderproducts::find()->where(['product_id' => $model->id])->count();
پاسخ
تشکر شده توسط: hamid
#3
پس اول با جدول کالاها باید وارد بشم؟
من چنتا کار میخوام انجام بدم یکی اینکه میزان فروش در یک بازه زمانی چقدر بوده.اگه از orderproducts وارد بشم چطوری به تاریخ فاکتور که توی orders هست دسترسی داشته باشم.
یکم پیچیده میشه چون همزمان با دو سه تا جدول کار دارم.
پاسخ
تشکر شده توسط:
#4
میتونید برای هرکدوم کوئری جدا بزنید یا از Join استفاده کنید. اگه با Yii1.1 کار میکنید از CDbCriteria و متد with استفاده کنید و اگه با Yii2 کار میکنید باید از ActiveQuery استفاده کنید.
پاسخ
تشکر شده توسط:
#5
[عکس: Qwf9D.png]
هر کاری میکنم اون چیزی که میخوام بیرون نمیاد ازش.
[عکس: U7ukt.png]
من میخوام اینکارو انجام بده

 $criteria = new CDbCriteria;
       $criteria->select = '*, SUM(o.amount) as amount_sum, SUM(oP.quantity) as quantity_sum';
       $criteria->with = array('orderproducts'=>array('alias'=>'oP'), 'orders'=>array('alias'=>'o'));
       $criteria->together = true;
       $criteria->distinct = true;
       $criteria->group = 'o.id, oP.product_id, t.id';
       
       if(!empty($_GET['email'])){
           $email = CHtml::encode($_GET['email']);
           if($user = Users::model()->findByAttributes(array('email'=>$email))){
                $criteria->addSearchCondition('o.user_id', $user->id);
           }
       }
       Tools::debug(Products::model()->findAll($criteria));
پاسخ
تشکر شده توسط:
#6
دقیقاً چه گزارشی میخواین بدست بیارین؟
پاسخ
تشکر شده توسط: hamid
#7
گزارش فروش.
لیست کالاها بیاد و بگه کلا چن تا فروخته شده و کل فاکتورها رو جمع بزنه.
یعنی amount رو از جدول orders و quantity رو از جدول orderproducts برای هر محصول و اگه خواستم بگم فلان کاربر چن تا خریده فقط لیست محصولاتی بیاد که اون خریده.
پاسخ
تشکر شده توسط:
#8
خوب چندین مدل گزارش فروش داریم. دقیقاً چه گزارشی میخواین؟ گزارش فروش یک کالای خاص؟ گزارش خریدهای یک مشتری خاص؟ گزارش فروش همه کالاها به تفکیک هر کالا؟ لطفاً مشکل رو دقیق بیان کنید.
پاسخ
تشکر شده توسط: hamid
#9
در اصل من گزارش فروش همه کالاها به تفکیک هر کالا رو میخوام و یه امکان دیگه که میخوام داشته باشه اینه که اگه یک کاربر خاص رو انتخاب کردیم فقط کالاهایی که اون خریده گزارشش بیاد و همه کالاها نیان.
اینا رو هم گزاشتم توی مدل products

'orders' => array(self::MANY_MANY, 'Orders', 'orderproducts(product_id, order_id)'),
			'orderproducts' => array(self::HAS_MANY, 'Orderproducts', 'product_id'),
پاسخ
تشکر شده توسط:
#10
خوب شما برای اینکه بدونید یه کاربر چندتا فروش داشته میتونید اینطوری عمل کنید:
$orderCount = Orders::model()->count('user_id=:userId AND paid=1', array(':userId' => $user->id));

برای فروش هر محصول هم میتونید از ریلیشن STAT استفاده کنید: http://www.yiiframework.com/doc/guide/1....ical-query

برای جمع فروش کل هم میتونید با Yii::app()->db کوئری دستی بزنید.
پاسخ
تشکر شده توسط: hamid
#11
ریلیشن STAT چی هست؟ کارش چیه؟ با HAS_MENY چه تفاوتی داره؟
پاسخ
تشکر شده توسط:
#12
توی لینکی که گذاشتم توضیح داده. کارهای آماری انجام میده که در حالت پیشفرض بجای اینکه خود رکوردهای وابسته رو برگردونه تعدادشون رو اعلام میکنه ولی میشه تغییرش داد طوری که بعنوان مثال مجموع یا میانگین ستون خاصی رو محاسبه و اعلام کنه.
پاسخ
تشکر شده توسط:
#13
این درسته؟
'quantityCount'=>array(self::STAT, 'Orderproducts', 'product_id'),
پاسخ
تشکر شده توسط:
#14
خیر. این فقط داره میگه چند رکورد برای این محصول توی جدول Orderproducts وجود داشته. نمیاد فیلد quantity اونها رو جمع بزنه. درواقع داره میگه که این محصول توی چندتا فاکتور ثبت شده.
پاسخ
تشکر شده توسط: hamid
#15
لینکی که دادم رو به دقت بخونید. انتهای همین بخش STAT توضیح داده که چطور کاستومایزش کنید.
پاسخ
تشکر شده توسط: hamid




کاربران در حال بازدید این موضوع: 1 مهمان