MHT
6 سال پیش توسط MHT مطرح شد
3 پاسخ

سوال درباره ی pivot table

اگر یک تیبل میانی product_shop داشته باشم، و بخوام یک مقدار رو ازش بگیرم چطور باید این کار رو انجام بدم؟
مثلا برای این تیبل اگر بخوام دو تا مقدار price و amount رو ذخیره کنم باید اینطوری توی کنترلر بنویسم؟
foreach ($shop->products as $product)
{
echo $product->pivot->price;
}

" public function up()
{
Schema::create('product_shop', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('shop_id');
$table->unsignedInteger('product_id');
$table->integer('price');
$table->integer('amount');
$table
->foreign('shop_id')
->references('id')
->on('shops')
->onDelete('cascade');
$table
->foreign('product_id')
->references('id')
->on('products')
->onDelete('cascade');
$table->timestamps();
});
}
"


ثبت پرسش جدید
MHT
@mahiHT 6 سال پیش آپدیت شد
0

البته این هم کنترلر:
"
public function store(Request $request)
{
$validated = $request->validated();
$product = Auth::user()->products()->Create($request->except('_token'));
$product->shops()->attach($request->get('shop_id'));
}
return redirect('/products');
}
"

class Product extends Model
{

public function shops(){
    return $this->belongsToMany('App\Product', 'product_shop',
        'shop_id', 'product_id')
        ->withPivot('products_amount', 'price')
        ->withTimestamps();
}

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

@maedehtoosi

نوع رابطه در الکوئنت رو درست انتخاب کردید؟

چند تا سناریوی احتمالی وجود داره:

حالت اول:

  • هر فروشگاه می‌تونه چندین محصول داشته باشه.
  • هر محصول تنها میتونه متعلق به یک فروشگاه باشه.

حالت دوم:

  • هر فروشگاه می‌تونه چندین محصول داشته باشه.
  • هر محصول میتونه به چندین فروشگاه تعلق داشته باشه

در حالت اول لازم نیست از رابطه belongsToMany استفاده کرد. میشه روابط رو با یه hasMany و یه belongsTo ایجاد کرد.
جدول‌های مورد نیاز: shops + products

در حالت دوم باید از پیوت تیبل استفاده کرد و از رابطه belongsToMany در مدل استفاده میشه. مثل کدهای شما در بالا.
جدول‌های مورد نیاز: shops + products + product_shop

البته انواع دیگری از روابط هم هستند که میتونید در مستندات لاراول مشاهده کنید.


MHT
@mahiHT 6 سال پیش مطرح شد
0

@ali.bayat
بله فکر کنم درسته،
کلش رو از روی این لینک نوشتم:https://laraveldaily.com/pivot-tables-and-many-to-many-relationships/
فقط توی تیبل میانی مقدار price و amount دارم. میخوام این دو مقدا ر رو نشون بده و مقدارشون ذخیره شه روی دیتابیس. کدهای مربوطه رو که می نویسم میگه null هستند این متدها، در صورتی که توی دیتابیس دستی مقدار دادم برای آزمایش...


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

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