راکت
Javad Ezaz
Javad Ezaz
توسط Javad Ezaz مطرح شد
حل
4 پاسخ

پیاده سازی دسته بندی به روش Polymorphic

@hesammousavi
@ali.bayat
سلام دوستان
چند تا مدل در نظر بگیرید (مثلا Product- Course - Post) که دارای دسته بندی هستن. ما میخوایم دسته بندی رو به صورت Polymorphic ، با رابطه ی چند به چند ، دارای دسته بندی والد و slug یونیک پیاده سازی کنیم اما مشکلی که داریم اینه که یه دسته بندتوی مدل Post والدش با همون دسته بندی توی مدل Course یا Product فرق داره، مثلا والد گیتار الکتریک توی مدل Product میشه گیتار ام توی مدل Course میشه آموزش راک.
به نظرتون چه جوری میشه توی رابطه Polymorphic ، این مشکل رو حل کرد، نمیخوام به ازای هر مدل یه مدل Category جدید داشته باشم.


ثبت پرسش جدید
محمدحسن یگانه
محمدحسن یگانه
تخصص :Full-Stack Web Developer Freelancer
@mhyeganeh6 سال پیشمطرح شد
1

@sjavadez

معمولا قاعده رایج در مواقع مواجهه با slug های تکراری اضافه کردن یک عدد incremental به آخرش هست که اگر از پکیج هایی مثل cviebrock/eloquent-sluggable هم استفاده بکنید این کار اتومات انجام میشه.
یعنی میشه اینجوری:

Record A:
id: 1
title: گیتار الکتریک
categorable_type: App\Prducct
categorable_id: 42
slug: گیتار-الکتریک

و

Record B:  
id: 2  
title: گیتار الکتریک  
categorabletype: App\\Course  
categorableid: 7  
slug: گیتار-الکتریک-1

اگر هم نخواستید میتونید خودتون بصورت دستی یک چیز دیگه قرار بدید. مثلا اسپیس بینشون رو در یکی حذف کنید یا ...


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

@sjavadez

میتونی از پکیج زیر استفاده کنی:
https://github.com/AliBayat/Laravel-Categorizable

مستندات در گیت‌هاب و گفتگوی زیر:
https://roocket.ir/discuss/6117


محمدحسن یگانه
محمدحسن یگانه
تخصص :Full-Stack Web Developer Freelancer
@mhyeganeh6 سال پیشمطرح شد
1

به نظرم یک قسمت کار رو دارید اشتباه میرید و اون هم اینکه اگر چه عناوین اسمی دو تا دسته بندی مثل هم باشند ولی نباید اون دو تا رو به یک چشم ببینید.

یعنی در همین مثلالی که زدید دسته بندی «گیتار الکتریک» در مدل Product تفاوت های زیادی داره از نظر منطقی با دسته بندی «گیتار الکتریک» در مدل Course و اگر یکی در نظر بگیریدشون مشکلات زیادی پیش میاد. از اون طرف گزینه دیگه هم سربار خیلی زیادی نداره. فقط کافیه این دو تا مورد رو از هم تفکیک کنید و یعنی دو تا رکورد مختلف باشند. (گرچه عناوینشون با هم به ظاهر یکسان هست)

Record A:
id: 1
title: گیتار الکتریک
categorable_type: App\Prducct
categorable_id: 42

و

Record B:
id: 2
title: گیتار الکتریک
categorable_type: App\Course
categorable_id: 7

Javad Ezaz
Javad Ezaz
تخصص :برنامه نویس php و لاراول
@sjavadez6 سال پیشمطرح شد
0

@mhyeganeh
فیلد slug که میخوام بعنوان routeModelBinding تعریف بشه رو چیکار کنم؟ این فیلد توی دیتابیس unique هستش و نمیتونم دو تا category با اسلاگ یکسان داشته باشم


محمدحسن یگانه
محمدحسن یگانه
تخصص :Full-Stack Web Developer Freelancer
@mhyeganeh6 سال پیشمطرح شد
1

@sjavadez

معمولا قاعده رایج در مواقع مواجهه با slug های تکراری اضافه کردن یک عدد incremental به آخرش هست که اگر از پکیج هایی مثل cviebrock/eloquent-sluggable هم استفاده بکنید این کار اتومات انجام میشه.
یعنی میشه اینجوری:

Record A:
id: 1
title: گیتار الکتریک
categorable_type: App\Prducct
categorable_id: 42
slug: گیتار-الکتریک

و

Record B:  
id: 2  
title: گیتار الکتریک  
categorabletype: App\\Course  
categorableid: 7  
slug: گیتار-الکتریک-1

اگر هم نخواستید میتونید خودتون بصورت دستی یک چیز دیگه قرار بدید. مثلا اسپیس بینشون رو در یکی حذف کنید یا ...


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

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