【发布时间】:2019-06-03 18:57:36
【问题描述】:
我在我的数据库中使用 EAV 模式。意思是我有一个产品,属于很多规格,规格属于很多规格值。
我需要按条件对我的产品进行分类。例如,我的产品有规格组。像 iPhone 6 这样的产品有一个“电话”组,而“电话”组有显示、RAM、存储等规格。所有这些规范都有一个位置列,如 RAM (POS 1)、Storage (POS 2)、Display(Pos 3)。在每个规格中,很多值和每个值也有位置列。
因此,当我获取所有产品时,每个产品都与该组有关系。我正在使用雄辩的关系 hasManyThrough 来获取与该组相关的所有规范。
我的收藏是这样的: https://pastebin.com/8TAM62wt
根据示例,我需要按规格值对我的位置进行排序,但值应该通过位置列规格表获取。我的英文不好,我再举一个例子。
在这段代码中 https://pastebin.com/QnC7Drq3
我需要按规格值对所有产品进行排序,其中规格表的标题为 Display,因为它的位置是 1。 所以我按显示器对我的产品进行了排序,然后我转到下一个具有更高位置值的规格。根据这个例子,它应该是存储,因为位置是 3。
我知道唯一的一种方法,如何排序,当relatedSpecifications 是一个数组(集合)时它是有效的,但当它是一个数组时它不起作用。
$products = ModelProvidersProducts::has('relatedProduct')->where('quantity', '!=', 0)->get();
$products->sortBy(function($q){
return $q->relatedProduct->relatedSpecifications->position;
});
我希望我的英语足以描述我的问题。希望你们中的一些人可以帮助我,或者至少指出正确的方法。
另外,我知道对集合进行排序很慢,然后是 orderBy,如果您可以举一个 orderBy 而不是 sortBy 的例子,也许会更好?
【问题讨论】: