سلام دوستان،خسته نباشید، یه سایت وبلاگ ساز هست،که در مورد رابطه دیتابیسش سر در گم شدم،ممنون میشم کمک کنید،
رابطه وبلاگ و مقاله ها با دسته بندی،چون 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
این موردی که شما گفتین پست و پیج میتونن چندین کامنت داشته باشن،ولی تو موردی که من میخوام بلاگ و ارتیکل یه دسته بندی میتونن داشته باشن و دسته بندی میتونه مال چندین بلاگ و پست باشه
من کلیت استفاده از روابط polymorphic رو براتون توضیح دادم.. این که متوجه بشید کجا کاربرد داره.
برای اینکه بیشتر بخواید بدونید نمیشه اینجا توضیح داد و زیاد میشه.
مستندات خود لاراول و اصول طراحی پایگاه داده و روابط چندریختی (morph) در سطوح مختلف برنامه نویسی رو مطالعه کنید.
@ali.bayat
من استفاده کردم ازش،ولی تو این مورد گیج شدم،چون تو موردای قبلی مثل مثال شما یک به چند بود و مشخص،ولی تو این مورد من برعکس میشه،این مورد رو میخواسم بیشتر بدونم
رابطه های شما چند به چند میشن. یعنی در تصویری که ارسال شده از موجودیت های سمت راست تصویر به هرکدوم از موجودیت های سمت چپ نیست یه خط (رابطه) ایجاد کنید.
@khanzadimahdi
لطف کردین،پس طوری که فهمیدم از چند به چند استفاده میکنیم ولی در استفاده عملی فقط یه خط رسم میشه،ینی از دسته بندی چند خط رسم میشه ولی بلاگ و ارتیکل فقط یه خط رسم میشه،درست فهمیدم؟
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟