zoghal
جمعه 15 خرداد 1388, 10:46 صبح
یک تیبل داریم به نام user که تو این تیبل هر یوز می تونه در یک گروه قرار بگیره.
مثلا گروه مشتری و پشتیبان
حال در یک تیبل دیگر که در واقع یک سیستم مسجینگ هست
2 فیلد داریم که یکی باید ای مشتری و دیگری ای دی پشتیبان رو نگه داره
از اونجا که در کیک باید فیلد های که با تیبلی دیگر مرتبط هست باید به صورت Table_filed نام گذاری شود
سوال اینجاست که در این حالت من چطور میتونم 2 فیلد رو به یک فیلد در تیبل دیگر مربیط کنم و فرضا اگر فیلد مشتری user_id باشه ، فیلد پشتیبان چه صوری باید نام گزاری بشه
zoghal
جمعه 15 خرداد 1388, 11: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'
)
)
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.