به خودم گفتم در چند هفته آینده ماژول هایی رو معرفی کنم که در لیست بهترین های 2012 دروپالیون وجود داره. این هفته به سراغ ماژول relation اومدم. ماژولی که هنوز خیلی محبوب نشده اما خیلی میتونه به شما در انجام پروژه های دروپال کمک کنه. بنابراین بد نیست اگر ما رو در ادامه بحث همراهی کنید تا به قدرت دروپال بیشتر پی ببریم.
وقتی ما قراره یک پروژه رو برنامه نویسی کنیم معمولا اول از همه ساختار دیتابیس رو تعیین میکنیم. خیلی از مواقع به این نتیجه میرسیم که یک جدول واسط برای ارتباط موجودیت های مختلف ایجاد کنیم.مثلا رابطه دانشجو با درس که یک جدول دانشجو/درس برای اون ایجاد میکنیم و ID های دانشجو و درس در این جدول ذخیره میشه به این ترتیب بعدا میفهمیم که چه دانشجویی چه درسهایی دارد. یا میفهمیم چه درسی توسط چه دانشجوهایی گرفته شده. خوب حتما به خودتون میگید که این کار رو با دروپال میشه انجام داد به وسیله entity reference. من به شما حق میدم. اولین مشکل اینه که اگر شما از دانشجو به درس یک فیلد reference درست کنید در نهایت فقط میتونید خروجی لیست درس های یک دانشجو را ببینید. و اگر بخواهید لیست دانشجوهایی که یک درس مشخص را گرفته اند ببینید باید یک فیلد back reference در درس به دانشجو ایجاد کنید. بنابراین ما نیاز به 2 فیلد داریم.
مشکل دوم رو با یک مثال دیگه شرح میدهم. فرض کنید میخواهید ارتباط دوستی بین کاربران را تعیین کنید. شما باز میتوانید یک فیلد در هر کاربر تعریف کنید که لیست دوستانش را انتخاب کند. اما فرض کنید میخواهیم کیفیت دوستی را نیز تعیین کنیم. یعنی انتخاب کنیم که کاربر 1 با کاربر 2 ارتباطی از نوع همسر دارند. یا ارتباطی از نوع دوست یا همکلاسی. در این صورت entity reference هیچ راه حلی ندارد. شما نیاز به راهی دارید که نوع ارتباط را بتوان مشخص کرد. ماژول relation چون امکان این را دارد که برای نوع ارتباط فیلد تعریف کنیم بنابراین گزینه ایده آلی برای این نوع ارتباط است.
از دیگر امکانات این ماژول ارتباطات تعدی است. یعنی اگر کاربر 1 با کاربر 2 دوست است و اگر کاربر 2 با کاربر 3 دوست است بنابراین کاربر1 با کاربر 3 نیز دوست است. این نوع ارتباط در ماژول relation قابل تعریف است.
در ضمن شما برای استفاده از این ماژول نیاز به ایجاد هیچ فیلدی ندارید. البته میتوانید فیلد هم ایجاد کنید اما بدون فیلد هم میتوانید از طریق بلوکی که ساخته میشود ارتباطات را مشخص کنید.
شاید بعد از همه اینها دارید به این فکر میکنید که پس از این به بعد میتوانم تمام ارتباطات سایت را با این ماژول مدیریت کنم. باید این نکته رو یادآوری کنم که هر ماژولی نقطه ضعفی دارید و متاسفانه مشکل ماژول relation منطق پیچیده آن است. شما برای مسلط شدن به این ماژول کمی به تمرین نیاز دارید. بنابراین اگر مطمئن هستید ارتباطات شما خیلی پیچیده نیست میتوانید از ماژول entity reference استفاده کنید.
خوشحال میشویم تجربه های خودتون در استفاده از این ماژول رو با ما به اشتراک بزارید.