PDA

View Full Version : مشکل با ActiveRecord



engmmrj
دوشنبه 14 بهمن 1392, 09:50 صبح
سلام
من یک relation زدم و میخوام از طریق یک relation به یک relation دیگه دسترسی پیدا کنم و SUM یکی از فیلد هارو بگیرم و درست کار نمیکنه !

public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
'unit_lesson' => array(self::BELONGS_TO, 'UnitLesson',array('unit_lesson_id'=>'unit_id')),
);
}



Unit::model()->with(
array(
'unit_lesson' => array(
'with' => 'lesson' => array(
'select' => 'SUM(unit)'
)
)

)
)->findAll();

shpegah
دوشنبه 14 بهمن 1392, 13:39 عصر
شما که از ریلیشن استفاده کردید فکر میکنم دیگه نیازی به with دوم نداشته باشید در ضمن برای استفاده از sum احتیاج دارید از group by استفاده کنید

MMSHFE
دوشنبه 14 بهمن 1392, 13:57 عصر
اینجا (http://www.yiiframework.com/forum/index.php/topic/15803-mysql-functions-in-model-findbysql/) رو ببینید.

engmmrj
دوشنبه 14 بهمن 1392, 21:55 عصر
اینجا (http://www.yiiframework.com/forum/index.php/topic/15803-mysql-functions-in-model-findbysql/) رو ببینید.
این لینک که دادید به صورت دستی sqlنوشته شده ، آیا CAtiveRecord قابلیتی نداره که به صورت ORM انجام بشه ؟

MMSHFE
سه شنبه 15 بهمن 1392, 00:59 صبح
راستش این چند روزه فرصت کافی ندارم که بشینم دقیق تست کنم ولی فکر کنم با self::STAT بتونین به نتیجه دلخواه برسین.

shpegah
چهارشنبه 23 بهمن 1392, 09:12 صبح
نمیدونم شاید تاالان مشکلتون حل شده باشه ولی ممکنه برای سایر دوستان مفید باشه

در مدل user تون این ریلیشنها رو بذارید


'tblLessons' => array(self::MANY_MANY, 'TblLesson', 'tbl_user_lesson(user_id, lesson_id)'),
'sumUnitsUser'=>array(self::STAT, 'TblLesson', 'tbl_user_lesson(user_id, lesson_id)','select'=>'sum(unit)'),



سپس در کنترلر اون در actionIndex به این شکل عمل کنید


$dataProvider=new CActiveDataProvider('TblUser',array('criteria'=>array('with'=>array('sumUnitsUser'));


ودر انتها برای نمایش آن در view_ آن از این کد استفاده کنید


<?php echo CHtml::encode($data->sumUnitsUser); ?>

موفق باشید

engmmrj
چهارشنبه 23 بهمن 1392, 14:26 عصر
'tbl_user_lesson(user_id, lesson_id)'
این یعنی چی ؟

MMSHFE
چهارشنبه 23 بهمن 1392, 15:17 عصر
یعنی اینکه جدول tbl_users شما به جدول tbl_lessons یک Relation از نوع چند به چند (Many-To-Many یا همون self::MANY_MANY) داره که برای این کار، از جدول واسطه tbl_user_lesson استفاده شده و توی جدول واسط، فیلد user_id کلید خارجی به جدول tbl_users و فیلد lesson_id کلید خارجی به جدول tbl_lessons هست.