Вы можете попробовать один из этих методов
- Построение модели для таблицы
sale_invoice_product
с отношениями к SaleInvoice
и Product
. Затем вручную создайте JSON в вашем контроллере - Создайте SQL Представление и модель для него
Решение 1: Построение модели для промежуточной таблицы и построение вручную JSON
Допустим, вы создали модель с именем SaleInvoiceProduct
, которая имеет отношение product()
к таблице Products
и отношение saleInvoice()
к таблице SaleInvoices
. В вашем контроллере вы можете сделать это
$resultInvoiceProducts = [];
$allSaleInvoiceProducts = SaleInvoiceProduct::all();
foreach ($allSaleInvoiceProducts as oneSaleInvoiceProduct) {
$tempSaleInvoiceProduct = new stdClass();
$tempSaleInvoiceProduct->product_id = oneSaleInvoiceProduct->product_id;
$tempSaleInvoiceProduct->product_name = oneSaleInvoiceProduct->product->name;
$tempSaleInvoiceProduct->saleInvoiceId = oneSaleInvoiceProduct->saleInvoiceId;
$tempSaleInvoiceProduct->data = oneSaleInvoiceProduct->saleInvoice->date;
array_push($resultInvoiceProducts, $tempSaleInvoiceProduct);
}
Решение 2: Использование SQL Представления
Вы можете создать SQL Представление, которое использует соединения для построения необходимых вам данных
DROP VIEW IF EXISTS vSaleInvoiceProduct;
CREATE VIEW vSaleInvoiceProduct AS
SELECT sp.product_id,
sp.saleInvoiceId,
sp.`count`,
p.product_name,
s.`date`
FROM SaleInvoiceProduct sp
LEFT JOIN SaleInvoices s on sp.saleInvoiceId = s.saleInvoiceId
LEFT JOIN Products p on sp.product_id = p.product_id
Затем вы можете создать Laravel модель для этого представления, так же, как вы делали бы это для любой таблицы, вызвать для нее метод ::all()
и напрямую вернуть результаты с помощью json()