سلام دوستان،خسته نباشید، یه سایت وبلاگ ساز هست،که در مورد رابطه دیتابیسش سر در گم شدم،ممنون میشم کمک کنید،
رابطه وبلاگ و مقاله ها با دسته بندی،چون blog,article با category رابطه دارن،به فکرم رسید از polymorphic استفاده شه،ولی انگار رابطش برعکس میشه،
///category model ////
public function categoryable()
{
return $this->morphTo();
}
///blog model ////
public function category() {
return $this->morphOne( Category::class , 'categoryable');
}
///article model ////
public function category()
{
return $this->morphOne(Category::class, 'categoryable');
}
الان سوالم اینه که واسه ذخیره دسته بندی هر بلاگ و ارتیکل به چه شکل باید بنویسم اصن این رابطه ها درست هستن؟،ممنون میشم راهنمایی کنید،
ساختار کد شما به صورت زیر باید باشه
blog
id - integer
name - string
articles
id - integer
name - string
categories
id - integer
name - string
categoriable
category_id - integer
categoriable_id - integer
categoriable_type - string
حالا ساختار مدل post و articles به صورت زیر میشه
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
/**
* Get all of the tags for the post.
*/
public function categories()
{
return $this->morphToMany('App\Category', 'categoriable');
}
}
و در اخر مدل category به صورت زیر میشه:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
/**
* Get all of the posts that are assigned this category.
*/
public function posts()
{
return $this->morphedByMany('App\Post', 'categoriable');
}
/**
* Get all of the articles that are assigned this category.
*/
public function categories()
{
return $this->morphedByMany('App\Article', 'categoriable');
}
}درود
پلیمورفیسم در معنای کلمه یعنی: شرط وقوع در اشکال مختلف..
روابط polymorphic در سناریوهایی شبیه به زیر کارایی دارند
فرض کنید در یه اپلیکیشن شما مدل های Post و Page رو دارید ... و هر دو این موارد میتونن کامنت داشته باشند..
posts:
id
title
content
posts_comments:
id
post_id
comment
date
pages:
id
body
pages_comments:
id
page_id
comment
date
به جای اینکه از حالت بالا استفاده کرد و دو جدول مربوط به Comments ساخت براحتی میشه از یه رابطه پلیمورفیک استفاده کرد با این تفاوت که در جدول کامنتها یه گزینه commentable_type اضافه میشه که باید با نام کلاسی که کامنت بهش مربوط هست، پر بشه. پس نتیجه میشه شبیه زیر:
posts:
id
title
content
pages:
id
body
comments:
id
commentable_id
commentable_type
date
تصویر زیر رو در نظر بگیرید:

ما در اینجا 3 گزینه داریم:
چنانچه سناریوی که شما باهاش روبرو هستید شبیه به این مورد هست... استفاده از این روش کاملا درسته و اگر نه احتمالا باید روش سادهتری به کار ببرید.
موفق باشید
شاید پاسخ شما همینجا باشد
@khanzadimahdi
ممنون از پاسختون،این رابطه چند به چند پلی مورفیک هست؟ینی باید ** رابطه چند به چندش استفاده کنم ؟
@ali.bayat
این موردی که شما گفتین پست و پیج میتونن چندین کامنت داشته باشن،ولی تو موردی که من میخوام بلاگ و ارتیکل یه دسته بندی میتونن داشته باشن و دسته بندی میتونه مال چندین بلاگ و پست باشه
@mohammadghorbani1992
کدهایی که فرستادم رو دقیقا کپی و پیست کنید توی مدل هایی که دارین.
@khanzadimahdi
ممنون دوست عزیز،میخواستم بیشتر در موردش بدونم،لطف کردین
@ali.bayat
من استفاده کردم ازش،ولی تو این مورد گیج شدم،چون تو موردای قبلی مثل مثال شما یک به چند بود و مشخص،ولی تو این مورد من برعکس میشه،این مورد رو میخواسم بیشتر بدونم
@khanzadimahdi
ممنون،تشکر
@khanzadimahdi
لطف کردین،پس طوری که فهمیدم از چند به چند استفاده میکنیم ولی در استفاده عملی فقط یه خط رسم میشه،ینی از دسته بندی چند خط رسم میشه ولی بلاگ و ارتیکل فقط یه خط رسم میشه،درست فهمیدم؟