اگر یک تیبل میانی 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();
});
}
"
البته این هم کنترلر:
"
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();
}نوع رابطه در الکوئنت رو درست انتخاب کردید؟
چند تا سناریوی احتمالی وجود داره:
حالت اول:
حالت دوم:
در حالت اول لازم نیست از رابطه belongsToMany استفاده کرد. میشه روابط رو با یه hasMany و یه belongsTo ایجاد کرد.
جدولهای مورد نیاز: shops + products
در حالت دوم باید از پیوت تیبل استفاده کرد و از رابطه belongsToMany در مدل استفاده میشه. مثل کدهای شما در بالا.
جدولهای مورد نیاز: shops + products + product_shop
البته انواع دیگری از روابط هم هستند که میتونید در مستندات لاراول مشاهده کنید.
شاید پاسخ شما همینجا باشد
@ali.bayat
بله فکر کنم درسته،
کلش رو از روی این لینک نوشتم:https://laraveldaily.com/pivot-tables-and-many-to-many-relationships/
فقط توی تیبل میانی مقدار price و amount دارم. میخوام این دو مقدا ر رو نشون بده و مقدارشون ذخیره شه روی دیتابیس. کدهای مربوطه رو که می نویسم میگه null هستند این متدها، در صورتی که توی دیتابیس دستی مقدار دادم برای آزمایش...