راکت

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

12 پاسخ

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

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

ثبت پرسش جدید

پاسخ‌ها

12
سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

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

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

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

شاید پاسخ شما همین‌جا باشد

saman
saman
@saman1111

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

علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

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

علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

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

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

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

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

AriaieBOY
AriaieBOY
@ariaieboy

تخصص: TALL Stack Lover

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

علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

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

AriaieBOY
AriaieBOY
@ariaieboy

تخصص: TALL Stack Lover

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

علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

@ariaieboy
خیلی ممنون

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

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