多级数据库查询

时间:2019-04-29 12:41:34

标签: laravel eloquent

关于Laravel,我有一个复杂的问题。我有3张桌子; “订单”,“订单包装”和“ 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 个答案:

答案 0 :(得分:1)

我不确定我是否了解order_line表和order_line_article表之间的区别,但是无论哪种方式,为什么不能通过Laravel的Relationships实现这一点?

例如

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()