رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اموزش join کردن در فریمورک Yii (حل شد)
#1
سلام وقت بخیر

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

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

ممنونم.
پاسخ
تشکر شده توسط:
#2
باید از relation استفاده کنید.
پاسخ
تشکر شده توسط: maryam
#3
(20-04-1394، 03:29 ب.ظ)ADMIN نوشته: باید از relation استفاده کنید.

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

ممنونم.باید از findAllByAttributes استفاده کرد ؟
پاسخ
تشکر شده توسط:
#4
فرض کنیم میخواین 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'));
پاسخ
تشکر شده توسط: abdollah110110 , maryam
#5
بله درسته استاد

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

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

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


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

ممنونم.
پاسخ
تشکر شده توسط:
#6
ساختار جداولتون و ارتباط بین اونها و relationهایی که توی مدل هست رو بنویسید.
پاسخ
تشکر شده توسط:
#7
استاد این جدول 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));
ممنونم.
پاسخ
تشکر شده توسط:
#8
وقتی از تگ shcode استفاده میکنید دیگه تگ code رو نگذارین.
پاسخ
تشکر شده توسط: maryam
#9
(22-04-1394، 02:06 ب.ظ)ADMIN نوشته: وقتی از تگ shcode استفاده میکنید دیگه تگ code رو نگذارین.

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

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

حالا توی ویو مثلاً میخواین فیلد name از جدول categories رو که مربوط به دسته بندی محصول موردنظرتون هست، نشون بدین:
echo $model->category->name;
پاسخ
تشکر شده توسط: maryam
#11
استاد اینکه چطور این کد رو به کد قبلی اضافه کنم تا بتونم تصاویر و دسته بندی رو با هم نشون بدم  مشگل دارم.
وقتی اینو استفاده می کنم
$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));
پاسخ
تشکر شده توسط:
#12
چیزی نمیخواد اضافه کنید. فقط همون کدی که دادم کافیه. وقتی میگین model->category$ خود Yii میره کوئری میزنه.
پاسخ
تشکر شده توسط: maryam
#13
بله درست شد استاد یک دنیا ممنونم.

خیلی بزرگوار هستین.
پاسخ
تشکر شده توسط:




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