Многоуровневый запрос к базе данных - PullRequest
1 голос
/ 29 апреля 2019

У меня сложный вопрос о Ларавеле. У меня 3 стола; "orders", "order_packages" и "order_line_articles".

Каждый заказ (таблица "orders") состоит из пакетов (таблица "order_packages"), а эти пакеты содержат статьи (таблица "order_line_articles"). Некоторые из них имеют более конкретный выбор, например меру (столбец "choice_id"). У каждого товара также может быть свой поставщик, и у всех этих поставщиков разные способы обработки.

Я хочу, чтобы все заказы, для которых "order_line_articles" еще не были доставлены (столбец "урегулированы"). Но тогда только товары, для которых поставщик имеет (например) ID 1 в качестве своей обработки. Я также хочу следующую информацию; заказ, предмет и, возможно, информацию на выбор (например, размер), если это необходимо.

Часть структуры БД ниже:

orders --> Model "Order"
------------
id
code_id (not relevant for now)
customer_id



order_lines --> Model "OrderLines"
------------
id
order_id
package_id (not relevant for now)



order_line_articles --> Model "OrderLineArticle"
------------
id
order_line_id
package_id (not relevant for now)
article_id
choice_id
settled



articles --> Model "Article"
------------
id
name
supplier_id
(and some more but not relevant)



suppliers --> Model "Supplier"
------------
id
name
handling_id

Это довольно сложная конструкция, но я надеюсь, что кто-то может помочь мне построить правильный запрос, поддерживая отношения.

1 Ответ

1 голос
/ 29 апреля 2019

Я не уверен, что понимаю разницу между таблицами order_line и order_line_article, но в любом случае, почему вы не можете добиться этого с помощью Laravel's Relationships?

* 1003 Е.Г. *

Order.php

// one Order has many OrderLines
public function orderLines() { return $this->hasMany('\App\OrderLine'); }

OrderLine.php

// one OrderLine has many OrderLineArticles
public function order() { return $this->belongsTo('\App\Order'); }
public function orderLineArticles() { return $this->hasMany('\App\OrderLineArticle'); }

OrderLineArticle.php

// one OrderLineArticle belongs to an Article
public function orderLine() { return $this->belongsTo('\App\OrderLine'); }
public function article() { return $this->belongsTo('\App\Article'); }

article.php

// an Article has many OrderlineArticles
public function orderLineArticles() { return $this->hasMany('\App\OrderLineArticle'); }

Запрос:

Order::with('orderlines.orderlinearticles.article')->get()->where('orderlines.orderlinearticles.settled','no')->where('orderlines.orderlinearticles.article.supplier_id',69)->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...