تالار گفتمان nCIS.ir

نسخه‌ی کامل: اموزش join کردن در فریمورک Yii (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام وقت بخیر

استاد ودوستان  عزیز میشه روش join کردن در yii  رو اموزش بدین  یا یه راهنمایی کنید .

من اطلاعات چند تا جدول رو باید بگیرم و تویه صفحه نشون بدم 

ممنونم.
باید از relation استفاده کنید.
(20-04-1394، 03:29 ب.ظ)ADMIN نوشته: [ -> ]باید از relation استفاده کنید.

میشه یه خورده بیشتر توضیح بفرمایید ک چند مرحله میشه و چی کار باید کرد

ممنونم.باید از findAllByAttributes استفاده کرد ؟
فرض کنیم میخواین 5 مورد از آخرین پستها رو همراه با کامنتهاشون استخراج کنید. اول از همه باید فیلد post_id رو توی جدول comments داشته باشین که به id از جدول posts وصله. بعد این relation رو توی مدل Posts بنویسید:
public function relations()
{
    return array(
        'comments' => array(self::HAS_MANY, 'Comments', 'post_id'),
    );
}

این relation رو هم توی مدل comments بگذارین:

public function relations()
{
    return array(
        'post' => array(self::BELONGS_TO, 'Posts', 'post_id'),
    );
}

حالا با این کد میتونید پستها و کامنتهاشون رو با Join استخراج کنید:
$posts = Posts::model()->with(array(
    'comments' => array(
        'condition' => 'comments.confirmed=1',
        'together' => true,
    ),
))->findAll(array('order' => 't.id DESC', 'limit' => 5, 'condition' => 't.confirmed=1'));
بله درسته استاد

من اینو برای سفارشات نوشتم انجام شد درست.

اما مثلا یه جدول محصولات داریم و دو تا جدول دسته بندی و یه جدول برند محصول

تو این دو تا جدول ک نمی تونم یه فیلد از جدول محصولات داشته باشیم  من فقط میخوام با توجه بهid  محصول  بره و فقط اون اسم دسته بندی و برند رو بخونه بیاره 


اینجا باید چی کار کنم؟ 

ممنونم.
ساختار جداولتون و ارتباط بین اونها و relationهایی که توی مدل هست رو بنویسید.
استاد این جدول products هست
id
name
category_id
color_id
berand_id
size_id
confirmed

و این جدول berand

id
berandname
confirmed
جدول سایز و رنگ به همین شکل مثل برند هستن اما

جدول categories

id
parent_id
products_id
name
confirmed
به این شکل هست.

و این جدول img
img_id
product_id
image

این ریلیشن های product

'size' => array(self::BELONGS_TO, 'Size','id'),
'berand' => array(self::BELONGS_TO, 'berand','id'),
'color' => array(self::BELONGS_TO, 'Color', 'id')
هست

و این ریلیشن  berand, sizeو بقیه
'products' => array(self::HAS_MANY, 'products', 'berand_id'),

'products' => array(self::HAS_MANY, 'products', 'size_id'),

هستش color هم به همین شکل هست.
حالا من وقتی روی محصول کلیک می کنم میره تو صفحه ویو .
شما کمک کردین و این کد نوشتیم ک محصول و تصاویر ش رو از تو img  بخونه اما حالا
برای نشون دادن این دسته بندی  باید چی کار کنم؟
$model = Products::model()->findByPk($id);
$img = Img::model()->findAllByAttributes(array('product_id'=>$model->id));

$this->render('_view', array('model' => $model, 'img' => $img));
ممنونم.
وقتی از تگ shcode استفاده میکنید دیگه تگ code رو نگذارین.
(22-04-1394، 02:06 ب.ظ)ADMIN نوشته: [ -> ]وقتی از تگ shcode استفاده میکنید دیگه تگ code رو نگذارین.

چشم . دو باره بفرستم ؟
خوب من برای ارتباط products با categories توضیح میدم، برای بقیه خودتون معادلش رو استفاده کنید.

باید توی مدل Products این relation رو داشته باشین:
public function relations()
{
    return array(
        'category' => array(self::BELONGS_TO, 'Categories', 'category_id'),
    );
}

حالا توی ویو مثلاً میخواین فیلد name از جدول categories رو که مربوط به دسته بندی محصول موردنظرتون هست، نشون بدین:
echo $model->category->name;
استاد اینکه چطور این کد رو به کد قبلی اضافه کنم تا بتونم تصاویر و دسته بندی رو با هم نشون بدم  مشگل دارم.
وقتی اینو استفاده می کنم
$posts = Posts::model()->with(array(
   'comments' => array(
       'condition' => 'comments.confirmed=1',
       'together' => true,
   ),
))->findAll(array('order' => 't.id DESC', 'limit' => 5, 'condition' => 't.confirmed=1'));



دیگ. این کد کار نمی کنه.
$model = Products::model()->findByPk($id);
$img = Img::model()->findAllByAttributes(array('product_id'=>$model->id));

$this->render('_view', array('model' => $model, 'img' => $img));
چیزی نمیخواد اضافه کنید. فقط همون کدی که دادم کافیه. وقتی میگین model->category$ خود Yii میره کوئری میزنه.
بله درست شد استاد یک دنیا ممنونم.

خیلی بزرگوار هستین.