Laravel 5.7 красноречивое обновление / удаление нескольких записей - PullRequest
0 голосов
/ 21 февраля 2019

Структура моей таблицы выглядит следующим образом:

invoices: 

        id, title, desciption, total_amount, --

products: 

        id, name, price, --

invoice_products

        id, invoice_id, product_id, --
  • В одном счете может быть несколько продуктов, поэтому

  • Я создал счетс продуктами, то данные заполняются в соответствии с вышеуказанной структурой БД.

  • Когда я обновляю счет-фактуру (скажем, invoice_id = 2), то я запутался, как лучше всего обновить таблицу "invoice_products".

  • Мой подход (для таблицы "invoice_products"):

    • delete * из invoice_products, где invoice_id = 2;
    • затем снова вставьте измененные продукты.
  • Я думаю, что это не очень хороший подход, так как я принудительно удаляю строки в invoice_products и снова вставляю новыеобновленные продукты.

  • есть ли способ сделать через eloquent?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать отношения Laravel многие ко многим для достижения этой функциональности:

Модель счета

public function products()
{
    return $this->belongsToMany('App\Product', 'invoice_products');
}

Модель продукта

Хотя здесь это и не требуется, но вы можете использовать это для получения счета на сопутствующие товары.

public function invoices()
{
    return $this->belongsToMany('App\Product', 'invoice_products');
}

Для обновления существующих данных вы можете использовать метод sync:

$products = [1, 2, 3, 4];
$invoice->products()->sync($products);

Вы можете узнать больше об отношениях более https://laravel.com/docs/5.7/eloquent-relationships

0 голосов
/ 21 февраля 2019

Я думаю, что invoice_products является сводной таблицей.Вы должны использовать метод синхронизации.

$productIds = [1,2,3];
$Invoice->products()->sync($productIds);

Также в вашей модели счета-фактуры отношения должны быть такими:

public function products()
{
    return $this->belongsToMany(Invoice::class, 'invoice_products', 'invoice_id', 'product_id');
}

Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...