علی اسماعیلی
4 سال پیش توسط علی اسماعیلی مطرح شد
12 پاسخ

سیستم شبیه ترب

سلام من یه سیستمی شبیه ترب دارم روش کار میکنم به این صورت که
یه جدول محصول داریم
یه جدول فروشگاه داریم
یه جدول واسط که کدوم فروشگاه چه محصولاتی رو داره
یه رابطه many to many دارم حالا
میخوام برای مثال: برای محصول موبایل a50 که فروشگاه x داره میفروشه نظر ثبت کنم جدولش به چه صورت میشه

این چیزی به ذهن خودم رسید این جوری بود که برای ثبت نظر محصول و فروشگاه ذخیره بشه آیا منطقی؟


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

یک جدول برای comments فروشگاه ایجاد میکنی که از رابطه morphMany استفاده کنی
یک مثال ساده در لینک زیر
https://laracasts.com/discuss/channels/tips/polymorphic-trick-to-store-comments


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 4 سال پیش مطرح شد
0

@juza66
سلام این جواب نمیده ها

رابطه میزنم به کدوم جدول محصول یا فروشگاه ؟

بعد نظر فقط میخوایم برای فروشگاه x و محصول y ثبت بشه فقط


saman
@saman1111 4 سال پیش مطرح شد
0

سلام
خب به جدول واسط بزنید رابطه رو


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 4 سال پیش مطرح شد
0

@saman1111
متن سوال رو خوب بخونید دارم جدول واسط


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

شما یک جدول برای کامنت ها دارید . شما میتونید کامنت های پست های بلاگ، فروشگاه، محصولات و ... رو تویی این جدول مدیریت کنی فقط کافیه شما تویی فیلد commentable نام کلاس رو نگهداری کنید و body هم متن کامنت شماست.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش آپدیت شد
0

بعد نظر فقط میخوایم برای فروشگاه x و محصول y ثبت بشه فقط

یک فیلد دیگه commentable_id دارید که آیدی محصول شماست، شما یکبار لینک که دادم رو ببینید و پیاده کنید ، البته تویی این سایت آقای @ali.bayat یک پکیج برای راحتی اینکار نوشته بودند سرچ کنید حتما پیدا میکنید


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 4 سال پیش آپدیت شد
0

@juza66
خب اکی تا اینجا رو میدونم
من میام برای محصول x نظر ثبت میکنم

از کجا بفهمم نظر برای کدوم فروشگاهه؟
هر محصول رو چند فروشگاه داره ها


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

یک فیلد برای نام فروشگاهت هم بذار، الان حضور ذهن ندارم راهنمایت کنم ولی بسیار ساده از روابط استفاده کنی


AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش آپدیت شد
1

@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
لینک بالا مراجعه کنید کامل توضیح داده


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 4 سال پیش مطرح شد
0

@ariaieboy
سلام خیلی ممنون منم اول همین به ذهنم رسیده بود ولی فگر گردم غیرمنطقی باشه
حالا آیا غیر منطقی تره که ما بیایم برای هر فروشگاه محصولات رو تکرار کنیم اونجوری افزوندگی دیتا رخ میده به درد نمیخوره


AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش مطرح شد
0

@ali.esmaili954
خیر شما نباید برای هر فروشگاه محصولات تکرار کنید علاوه بر تکرار داده ها. شما اصلا بعد قابلیت مقایسه را نمیتونید انجام بدید.
ویژگی که الان ترب داره اینه که برای یک محصول تمام فروشگاه هایی که موجود دارند را نمایش میده و شما میتونید از بین اونها انتخاب کنید.
و حتی پنل ادغام داره که اگر به هر دلیلی محصول شما به صورت جدا ایندکس شده بود بتونید اون با محصول اصلی ادغام کنید تا کاربر ها بتونن راحت تر مقایسه کنن.


علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 4 سال پیش مطرح شد
0

@ariaieboy
خیلی ممنون


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

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