سلام من یه سیستمی شبیه ترب دارم روش کار میکنم به این صورت که
یه جدول محصول داریم
یه جدول فروشگاه داریم
یه جدول واسط که کدوم فروشگاه چه محصولاتی رو داره
یه رابطه many to many دارم حالا
میخوام برای مثال: برای محصول موبایل a50 که فروشگاه x داره میفروشه نظر ثبت کنم جدولش به چه صورت میشه
این چیزی به ذهن خودم رسید این جوری بود که برای ثبت نظر محصول و فروشگاه ذخیره بشه آیا منطقی؟
یک جدول برای comments فروشگاه ایجاد میکنی که از رابطه morphMany استفاده کنی
یک مثال ساده در لینک زیر
https://laracasts.com/discuss/channels/tips/polymorphic-trick-to-store-comments
@juza66
سلام این جواب نمیده ها
رابطه میزنم به کدوم جدول محصول یا فروشگاه ؟
بعد نظر فقط میخوایم برای فروشگاه x و محصول y ثبت بشه فقط
شما یک جدول برای کامنت ها دارید . شما میتونید کامنت های پست های بلاگ، فروشگاه، محصولات و ... رو تویی این جدول مدیریت کنی فقط کافیه شما تویی فیلد commentable نام کلاس رو نگهداری کنید و body هم متن کامنت شماست.
بعد نظر فقط میخوایم برای فروشگاه x و محصول y ثبت بشه فقط
یک فیلد دیگه commentable_id دارید که آیدی محصول شماست، شما یکبار لینک که دادم رو ببینید و پیاده کنید ، البته تویی این سایت آقای @ali.bayat یک پکیج برای راحتی اینکار نوشته بودند سرچ کنید حتما پیدا میکنید
@juza66
خب اکی تا اینجا رو میدونم
من میام برای محصول x نظر ثبت میکنم
از کجا بفهمم نظر برای کدوم فروشگاهه؟
هر محصول رو چند فروشگاه داره ها
یک فیلد برای نام فروشگاهت هم بذار، الان حضور ذهن ندارم راهنمایت کنم ولی بسیار ساده از روابط استفاده کنی
@ali.esmaili954
این موردی که میخواهید خیلی ساده هست و اصلا morphToMany نیست
هر کامنت شما متعلق به یک فروشگاه و یک محصول در نتیجه شما باید دوتا رابطه یک به چند داشته باشید.
comments:
id
shop_id
product_id
title
body
etc
این میشه جدول و بعد رابطه ها هم که یک به جند هست.
class Comment
{
public function shop()
{
return $this->belongsTo(Shop::class, 'shop_id);
}
public function product()
{
return $this->belongsTo(Product::class,'product_id');
}
}
برای shop و product هم داریم:
public function comments()
{
return $this->hasMany(Comment::class);
{
حالا برای اینکه دسترسی پیدا کنید به نظرات یک محصول برای یک فروشگاه خاص میتونید این کوئری بزنید:
product = Product::find($product_id);
$product->load(['comments',function ($query) {
$query->where('shop_id', $shop_id);
}]);
روش های دیگه هم داره :
$product->comments()->where('shop_id', 1)->get()
https://laravel.com/docs/8.x/eloquent-relationships#querying-relations
لینک بالا مراجعه کنید کامل توضیح داده
@ariaieboy
سلام خیلی ممنون منم اول همین به ذهنم رسیده بود ولی فگر گردم غیرمنطقی باشه
حالا آیا غیر منطقی تره که ما بیایم برای هر فروشگاه محصولات رو تکرار کنیم اونجوری افزوندگی دیتا رخ میده به درد نمیخوره
@ali.esmaili954
خیر شما نباید برای هر فروشگاه محصولات تکرار کنید علاوه بر تکرار داده ها. شما اصلا بعد قابلیت مقایسه را نمیتونید انجام بدید.
ویژگی که الان ترب داره اینه که برای یک محصول تمام فروشگاه هایی که موجود دارند را نمایش میده و شما میتونید از بین اونها انتخاب کنید.
و حتی پنل ادغام داره که اگر به هر دلیلی محصول شما به صورت جدا ایندکس شده بود بتونید اون با محصول اصلی ادغام کنید تا کاربر ها بتونن راحت تر مقایسه کنن.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟