زمان جاری: 2012/05/25, 12:17 PM خوش آمدید مهمان گرامی! (ورودعضویت)



استفاده از دستور paginate - ارتباط ۳ جدول


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
استفاده از دستور paginate - ارتباط ۳ جدول
نویسنده پیام
amirpaia آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Nov 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #1
استفاده از دستور paginate - ارتباط ۳ جدول
ساختار جدوال زیر رو در نظر بگیرید
کد:
CREATE TABLE users (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL UNIQUE,
);
CREATE TABLE profiles (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    firstname VARCHAR(100) NOT NULL,
    lastname VARCHAR(100) NOT NULL,
    user_id INT(11)
    default_picture_id INT(11)
);
CREATE TABLE pictures (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    url VARCHAR(255) NOT NULL,
    profile_id INT(11)
);

جدول users ارتباط hasOne با profiles داره
و جدول profile ارتباط hasMany با pictures داره

یعنی هر کاربر یک پروفایل داره و هر پروفایل چند تا عکس داره
و در ضمن یکی از عکس ها به عنوان عکس default برای کاربر در جدول profile مشخص شده

(لطفا پیشنهاد تغییر ساختار رو ندید چون مثلا یه راه این هست که جدول users ارتباط hasMany با pictures داشته باشه / اما این فقط یک مثال هست و من توی کار اصلی که دارم ساختار دقیقا به این شکل هست و من تغییری توی ساختار نمی تونم بدم یعنی درواقع users و pictures هیچ ارتباط مستقیمی با هم نمی تونن داشته باشن)

حالا سوال این هست که من چطوری می تونم توی ویوی pictures/index با استفاده از دستور paginate یه لیستی رو نشون بدم که حاوی موارد زیر باشه
(نام کاربری / نام و نام خانوادگی کاربر / نمایش عکس پیش فرض)

خب من چون توی مدل Piture با مدل Profile ارتباط دارم می تونم نام و نام خانوادگی رو نشون بدم ولی مشکل روی نمایش "نام کاربری" هست
(یه راه هم گرفتن لیست کل کاربرها و گذاشتن یه لوپ روی اونها هست که خوب مشخصا غیر اصولی ه (: )
چطوری می تونم این کار رو بکنم؟ راه درست چیه؟
پیشاپیش خیلی ممنون از جوابتون
2011/01/17 03:35 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 992
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
871 بار تشکر شده در 560 پست
ارسال: #2
RE: استفاده از دستور paginate - ارتباط ۳ جدول
سلام بر شما
1- چرا جدول یوزر شما پسورد نداره :دی
2- خوب همینطر که شما جداول کاربران => پروفایل => آواتور ها رو بهم ارتباط می دید. باید به صورت بر عکس هم ارتباط بدید یعنی آواتور ها => پروفایل => کاربران
2011/01/17 06:34 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
amirpaia آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Nov 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #3
RE: استفاده از دستور paginate - ارتباط ۳ جدول
۱- ما با کاربرامون دوستیم گفتیم بدون پسورد بیان و برن :دی / ولی نه این جداول رو همینطوری اینجا نوشتم جدول ها اینطوری نیستن اصلا (:
۲- درسته / ارتباط دارن
اما مشکل اینه که جدول آواتور با کاربران هیچ ارتباط مستقیمی ندارند
آواتور ها => پروفایل => کاربران

حالا من می خوام توی ویوی آواتور ها ، username کاربران رو که توی جدول users هست نشون بدم

توی دستور paginate حتی وقتی recursive =1 هم هست جدول سوم یعنی users رو نمیاره
(آخرین تغییر در این ارسال: 2011/01/17 06:51 PM توسط amirpaia.)
2011/01/17 06:50 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 992
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
871 بار تشکر شده در 560 پست
ارسال: #4
RE: استفاده از دستور paginate - ارتباط ۳ جدول
recursive روی 2 بزارید. اما بهترین کار استفاده از رفتار کننده یا همون بی هویر containable هست
2011/01/17 06:59 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : cybercoder
amirpaia آفلاین
عضو جدید
*

ارسال‌ها: 9
تاریخ عضویت: Nov 2010
رتبه: 0
تشکر: 0
0 بار تشکر شده در 0 پست
ارسال: #5
RE: استفاده از دستور paginate - ارتباط ۳ جدول
مشکلم حل شد
با استفاده از کدهای زیر
کد PHP:
$this->Picture->unbindModel(array('belongsTo'=>array('Profile')),false);
$this->Picture->bindModel(array('belongsTo'=>array(
    
'Profile'=>array(),
    
'User' => array(
        
'foreignKey' => false,
        
'conditions' => array('User.id = Profile.default_picture_id'),
    ))),
false);
$this->set('profiles'$this->paginate()); 

صالح جان کار با رفتارکننده containable رو بلد نیستم ، بهتر از این کاری ه که الان من کردم؟
باید یه دفعه برم توی دفترچه کامل بخونم ببینم چطوریه

خیلی ممنون
(آخرین تغییر در این ارسال: 2011/01/17 09:50 PM توسط amirpaia.)
2011/01/17 09:49 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 992
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 402
871 بار تشکر شده در 560 پست
ارسال: #6
RE: استفاده از دستور paginate - ارتباط ۳ جدول
بله بهتر از این کاره ، در واقع همین کار رو تقریبا انجام میده با این تفاوت که شما یک آرایه به تابع چستجو اضافه میکنید
2011/01/18 06:24 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: