Обновление laravel имеет много связей для предметов в счете - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь обновить элементы в счете-фактуре, и мне нужна и проблема при удалении элемента или добавлении элемента, если я удаляю все элементы, которые он обновляет, мне нужна помощь, пожалуйста, я получаю сообщение об ошибке: «SQLSTATE [42S22]:Столбец не найден: 1054 Неизвестный столбец «продукт» в «списке полей» (SQL: обновление invoice_product набор id = 27, invoice_id = 29, product_id = 3, unit_price = 80, qty= 1, created_at = 2018-10-08 16:54:53, updated_at = 2018-10-08 16:54:53, deleted_at =, product = 3, где invoice_id = 29 иid = 27) "

таблица счетов

  • id
  • счет _ нет
  • дата
  • sub_total
  • скидка
  • всего

таблица товаров

  • id

  • item_code

  • item_desc

  • unit_price

таблица invoice_items

  • invoice_id

  • item_id

  • unit_price

  • Кол-во

модель счета

public function items()
    {
        return $this->hasMany(InvoiceProduct::class, 'invoice_id');
    }

обновление моего контроллера

$invoice = Invoice::findOrFail($id);

        $items = [];
        $itemIds = [];
        $subTotal = 0;

        foreach($request->items as $item) {
            if(isset($item['id'])) {
                InvoiceProduct::where('invoice_id', $invoice->id)
                    ->Where('id', $item['id'])
                    ->update($item);

                $itemIds[] = $item['id'];
               $item ='please re add items';
            } else {
                $items[] = new InvoiceProduct($item);
            }

            $subTotal += $item['unit_price'] * $item['qty'];
        }


        $data = $request->except('items');
        $data['sub_total'] = $subTotal;
        $data['total'] = $data['sub_total'] - $request->discount;

        $invoice->update($data);

        InvoiceProduct::whereNotIn('id', $itemIds)
            ->where('invoice_id', $invoice->id)
            ->delete();

        if(count($items)) {
            $invoice->items()->saveMany($items);
        }
 return response()
            ->json(['saved' => true, 'id' => $invoice->id]);
    }

1 Ответ

0 голосов
/ 08 октября 2018

Так как это Many to Many отношение.ваши отношения должны быть belongsToMany().

Модель отношений

class Invoice extends Model
{
    public function items()
    {
        return $this->belongsToMany(Item::class)
            ->withPivot(['unit_price', 'qty']);
    }
}

class Item extends Model
{
    public function invoices()
    {
        return $this->belongsToMany(Invoice::class)
            ->withPivot(['unit_price', 'qty']);;
    }
}

Манипулирующие данными

public class InvoiceControler extends Controller
{
    public function store(Request $reques)
    {
        // save the invoice
        $invoice = Invoice::create([
        ...
        ]);

        // save invoice-items
        foreach($request->items as $item) {

            $invoice->intems()->attach($item['id'], [
                'unit_price' => $item['unit_price'],
                'qty => $item['quantity']
            ]);
        }
    }

    public function update(Request $request, Invoice $invoice)
    {
         // update the invoice with new request data.
         $invoice->update([
         ...
         ]);

         // items to be synchronize
         // $items = [];

         // create an item array to synchronize
         foreach($request->items as $item) {

            array_set($items, $item['id'], [
                'unit_price' = $item['unit_price],
                'qty' = $item['qty']
            ]);

         }

         // synchronize items.
         $invoice->items()->sync($items);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...