رفتن به مطلب
انجمن پشتیبانی لاراول ایران

هاست لاراول با پشتیبانی 24 ساعته و امکانات کامل از مدیرهاست

negar_a

درج در جدول pivot

Recommended Posts

با سلام . 

من یک جدول order و یک product دارم . چون روابط این دو جدول many to many  هست بین این دو روابط مورد نیاز و جدول pivot رو ایجاد کرد . 

order_product دارای این فیلدها هست  .

id , order_id,product_id , quantity 

وقتی کد مربوط به درج در pivot رو مینویسم  این خطا رو میده 

SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: insert into `order_product` (`0`, `order_id`, `product_id`) values (2, 10, 1))

این هم کد من .

$order = Order::create($orderData);

        $order->products()->attach($productID,$quantity);

$productID و $quantity ارایه ای هستند که مقادیر لازم رو دارند . 

Share this post


Link to post
Share on other sites

سلام

ابتدا وارد مدل Order شده و متد products را بصورت زیر ویرایش کنید:

class Order extends Model 
{

	public function products()
    {
            return $this->belongsToMany(Product::class) ->withPivot('quantity');
    }
}

سپس متد orders در مدل Product را ویرایش کنید:

class Product extends Model 
{

	public function orders()
    {
        return $this->belongsToMany(Order::class)->withPivot('quantity');
    }
}

حال برای درج در جدول محور (pivot) بدین صورت عمل کنید:

$order = Order::create($orderData);

$productID = is_array($request->get('productID'))   ? $request->get('productID') : [];
$quantityID = is_array($request->get('quantityID'))  ? $request->get('quantityID') : [];

$attatchData  = array();
foreach ($i = 0; $i < count($productID); $i++)
    $attatchData[$productID[$i]] = ['quantity' => $quantityID[$i]];
  
  /*
  $productID  = [1, 2, 3]
  $quantityID = [20, 40, 50]
  
  $attatchData = 
  [
    '1'  => [ 'quantity' =>  20],
    '2'  => [ 'quantity' =>  40],
   '3'  => [ 'quantity' =>  50],  
  ];
  
  */

$order->products()->attach($attatchData);

ابتدا باید مقادیر productID و quantityID را در آرایه جدیدی به نام  attatchData بدین صورت قرار دهید ؛ یک آرایه انجمنی با کلید های productID و مقادیری بصورت آرایه (  [ quantity' =>  20'] ) . با فرض اینکه محصول با شناسه 1 دارای تعداد 20 باشد. ( محصولات با شناسه های 2 و 3 به ترتیب دارای مقادیر 40و 50)

بعد از پر کردن آرایه می توانید از متدهای ()attach و ()sync استفاده کنید.

امیدوارم که این پاسخ به شما کمک کرده باشد.

Share this post


Link to post
Share on other sites

وارد این گفتگو شوید

میتوانید پیام خود را ارسال کنید و بعد ثبت نام نمایید. در صورتی که حساب کاربری دارید, هم اکنون وارد شوید و در این گفتگو شرکت کنید.

مهمان
پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  Only 75 emoji are allowed.

×   لینک شما به صورت اتوماتیک جایگذاری شد.   نمایش به عنوان یک لینک به جای

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • جدید...