اگر یک تیبل میانی 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 هستند این متدها، در صورتی که توی دیتابیس دستی مقدار دادم برای آزمایش...
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟