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

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

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


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
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.bayat 4 سال پیش مطرح شد
1

@sjavadez

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

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
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
تخصص : برنامه نویس php و لاراول
@sjavadez 4 سال پیش مطرح شد
0

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش آپدیت شد
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

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


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

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