محمد قربانی
5 سال پیش توسط محمد قربانی مطرح شد
11 پاسخ

طراحی دیتابیس برای سایت وبلاگ ساز

سلام دوستان،خسته نباشید، یه سایت وبلاگ ساز هست،که در مورد رابطه دیتابیسش سر در گم شدم،ممنون میشم کمک کنید،
رابطه وبلاگ و مقاله ها با دسته بندی،چون 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');
    }

الان سوالم اینه که واسه ذخیره دسته بندی هر بلاگ و ارتیکل به چه شکل باید بنویسم اصن این رابطه ها درست هستن؟،ممنون میشم راهنمایی کنید،


ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش آپدیت شد
0

ساختار کد شما به صورت زیر باید باشه

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');
    }
}

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
0

درود

پلی‌مورفیسم در معنای کلمه یعنی: شرط وقوع در اشکال مختلف..
روابط 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

تصویر زیر رو در نظر بگیرید:

0

ما در اینجا 3 گزینه داریم:

  • Post ها میتونند Comment داشته باشند
  • Page ها میتونند Comment داشته باشند
  • Comment ها متعلق به Post یا Page هستند

چنانچه سناریوی که شما باهاش روبرو هستید شبیه به این مورد هست... استفاده از این روش کاملا درسته و اگر نه احتمالا باید روش ساده‌تری به کار ببرید.
موفق باشید


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@khanzadimahdi
ممنون از پاسختون،این رابطه چند به چند پلی مورفیک هست؟ینی باید ** رابطه چند به چندش استفاده کنم ؟
@ali.bayat
این موردی که شما گفتین پست و پیج میتونن چندین کامنت داشته باشن،ولی تو موردی که من میخوام بلاگ و ارتیکل یه دسته بندی میتونن داشته باشن و دسته بندی میتونه مال چندین بلاگ و پست باشه


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

@mohammadghorbani1992
کدهایی که فرستادم رو دقیقا کپی و پیست کنید توی مدل هایی که دارین.


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@khanzadimahdi
ممنون دوست عزیز،میخواستم بیشتر در موردش بدونم،لطف کردین


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
1

من کلیت استفاده از روابط polymorphic رو براتون توضیح دادم.. این که متوجه بشید کجا کاربرد داره.


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

برای اینکه بیشتر بخواید بدونید نمیشه اینجا توضیح داد و زیاد میشه.
مستندات خود لاراول و اصول طراحی پایگاه داده و روابط چندریختی (morph) در سطوح مختلف برنامه نویسی رو مطالعه کنید.


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@ali.bayat
من استفاده کردم ازش،ولی تو این مورد گیج شدم،چون تو موردای قبلی مثل مثال شما یک به چند بود و مشخص،ولی تو این مورد من برعکس میشه،این مورد رو میخواسم بیشتر بدونم


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

رابطه های شما چند به چند میشن. یعنی در تصویری که ارسال شده از موجودیت های سمت راست تصویر به هرکدوم از موجودیت های سمت چپ نیست یه خط (رابطه) ایجاد کنید.


محمد قربانی
تخصص : برنامه نویس لاراول
@mohammadghorbani1992 5 سال پیش مطرح شد
0

@khanzadimahdi
لطف کردین،پس طوری که فهمیدم از چند به چند استفاده میکنیم ولی در استفاده عملی فقط یه خط رسم میشه،ینی از دسته بندی چند خط رسم میشه ولی بلاگ و ارتیکل فقط یه خط رسم میشه،درست فهمیدم؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام