PDA

View Full Version : سوال: ارتباط 2 فیلد که به یک فیلد از تیبل دیگر متصل هست.



zoghal
جمعه 15 خرداد 1388, 09:46 صبح
یک تیبل داریم به نام user که تو این تیبل هر یوز می تونه در یک گروه قرار بگیره.

مثلا گروه مشتری و پشتیبان


حال در یک تیبل دیگر که در واقع یک سیستم مسجینگ هست
2 فیلد داریم که یکی باید ای مشتری و دیگری ای دی پشتیبان رو نگه داره

از اونجا که در کیک باید فیلد های که با تیبلی دیگر مرتبط هست باید به صورت Table_filed نام گذاری شود

سوال اینجاست که در این حالت من چطور میتونم 2 فیلد رو به یک فیلد در تیبل دیگر مربیط کنم و فرضا اگر فیلد مشتری user_id باشه ، فیلد پشتیبان چه صوری باید نام گزاری بشه

zoghal
جمعه 15 خرداد 1388, 10:43 صبح
راهش رو پیدا کردم
توضیح میدم تا دوستان هم استفاده کنند.
من یک تیبل دارم به اسم users

با مشخصات زیر



CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`email` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`mobile` varchar(15) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`hospital_id` int(11) NULL DEFAULT NULL ,
`rule` varchar(20) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL DEFAULT '0' ,
`active` tinyint(4) NOT NULL DEFAULT 1 ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci
AUTO_INCREMENT=12
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;



و تبل دیگری به نام reports مشخصات



CREATE TABLE `reports ` (
`id` int(11) NOT NULL ,
`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`text` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL ,
`user_id` int(11) NOT NULL ,
`status` int(11) NOT NULL DEFAULT 0 ,
`sup_id` int(11) NULL DEFAULT 0 ,
`close` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_persian_ci
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;




در تیبل users تمامی کاربران که دارای گروه های مختلفی هستند نگهداری میشه

حالا در تیبل reports ما دوتا تیبل داریم که یکی user_id هست و ای مشتری و دیگری sup_id که ای دی پشتیبان هست

حالا می خواستم با یک بار واکشی نام مشتر به همراه کسی ک ساپورت انجام داده رو بدست بیارم

به صورت استاندارد کیک باید فیلد های که با جداول دیگر رابطه دارند باید اینگونه طراحی شوند tablename_filedRelastion

مشکل اینجا شد که نمیشه 2 فیلد هم نام داشته باشیم، پس راهی نیست که این 2 واکشی انجام بدیم(راه فرار)

اما تو کیک به روش زیر حل شد

در مدل reports دو ریلیشن $belongsTo تعریف کردم یکی که مربوط به جدول user بود و دیگری مجازی تعریف کردم
به این صورت


var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
),
'Spp' => array(
'className' => 'User',
'foreignKey' => 'sup_id'

)
)