关于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
这是一个相当复杂的构造,但是我希望有人能够在维持关系的同时帮助我建立正确的查询。
答案 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()