PDA

View Full Version : ایجاد ارتباط داخلی یک جدول



barname_newis
جمعه 26 اردیبهشت 1393, 22:05 عصر
سلام
من میخوام یه ارتباط بین دو فیلد جدول product_categories ایجاد کنم به این صورت : هر شاخه (category) میتونه یک والد داشته باشه که از طریق فیلد parent_id مشخص میشه در صورتی که صفر باشه یعنی والد نداره و در صورتی که فرزند یک شاخه دیگه باشه آی دی پدرش ذخیره میشه
حالا میخوام در صورتی که یک والد حذف شد ،فیلد parent_id فزندان اون شاخه آپدیت بشن و مقدار صفر برگردونده بشه . همچین چیزی امکان داره یا باید از طریق برنامه نویسی این کار رو بکنم؟
یه سوال دیگه میخوام یک منو drop down از همین شاخه ها درست کنم به این صورت :


<li>
parent category
<ul>
<li>
child category
</li>
</ul>
</li>

میشه یگین از طریق ارتباطات میشه چه طور میشه این بخش رو به راحتی پیاده سازی کنم ؟
ممنون

MMSHFE
شنبه 27 اردیبهشت 1393, 09:51 صبح
توی طراحی دیتابیس، برای فیلد parent_id گزینه Null رو هم انتخاب کنید که قابل Null شدن باشه (اگه Null بود یعنی والد نداره و دسته بندی ریشه است). برای این کار هم اگه با Migrate میسازین، بجای NOT NULL بنویسید DEFAULT NULL و اگه دستی میسازین هم توی phpMyAdmin در قسمت Structure فیلد parent_id رو ویرایش کنید و تیک Null رو بزنید.
حالا توی relationهای مدل Category اینطوری بنویسید:

return array(
'parent' => array(self::BELONGS_TO, 'Categories', 'parent_id'),
'subCategories' => array(self::HAS_MANY, 'Categories', 'parent_id'),
);
حالا توی هر منو با model->parent$ به منوی والد (اگه ریشه باشه مقدارش null هست) و با model->subCategories$ به زیرمنوها (اگه نداشته باشه، null هست) دسترسی دارین.
برای اینکه بطور خودکار با حذف یک منو، زیرمنوهاش بیان توی ریشه هم موقعی که قید رو میخواین بسازین (کلید خارجی)، قسمت DELETE رو روی SET NULL تنظیم کنید.

barname_newis
شنبه 27 اردیبهشت 1393, 22:02 عصر
ممنون جناب شهرکی
همین بخش رو چطور میتونم در قالب یک ویجت تعریف کنم؟ (ویجت ساخت منو آبشاری از شاخه ها)
ممنون