【问题标题】:OrderBy or SortBy by multiple conditions?按多个条件排序或排序?
【发布时间】: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 的例子,也许会更好?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    您可以通过链式排序方式来实现这一点

    $products->sortBy(function($q){
        return $q->relatedProduct->relatedSpecifications->position;
    })->sortBy(function($q){
        return $q->relatedProduct->relatedSpecifications->somethingelse;
    });
    

    【讨论】:

    • 我举了一个错误的例子。 $products = ModelProvidersProducts::has('relatedProduct')->where('quantity', '!=', 0)->get(); $products->sortBy(function($q){ return $q->relatedProduct->relatedSpecsGroup->position; });relatedSpecsGroup 有动态数量的规范,然后我需要深入每个规范并按里面的值排序。我的代码的结果是Property [position] does not exist on this collection instance.
    猜你喜欢
    • 2013-09-13
    • 2021-03-21
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多