Как заказать с помощью добавленного атрибута в Laravel

Как заказать с помощью добавленного атрибута в Laravel

10.01.2014 09:20:02 Просмотров 46 Источник

Я создал атрибут appends в модели Laravel из кода ниже.

    protected $appends = array('total'=>'');

И я установил возвращаемое значение.

    public function getTotalAttribute(){
           return ProductPart::where('product_id',$this->id)->count();
    }

Затем я хочу заказать записи из базы данных с помощью total , но это не сработало.

У кого-нибудь есть какие-то предложения по этому поводу?

У вопроса есть решение - Посмотреть?

Ответы - Как заказать с помощью добавленного атрибута в Laravel / How to order by using appended attribute in Laravel

Является ответом!
Ayobami Opeyemi

10.01.2014 10:10:52

orderBy принимает фактическое поле базы данных, а не добавленное

попробовать это

$products = Product::all();
$products = $products->sortBy(function($product){
    return $product->total;
});
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/21051410#comment31653851_21051410
Спасибо, это потрясающе, и я попытался изменить результат, используя return -$product->totalон тоже работает.
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/21051410#comment42289580_21051410
Казалось, что это сработало и проголосовало, но после нескольких попыток это действительно не похоже. как только у вас есть коллекция, sortBy, похоже, не имеет никакого эффекта ни с закрытием, ни с сортировкой коллекции через атрибут append (который появляется в каждом объекте в коллекции). Похоже, что это может быть проблема с коллекциями, которые игнорируют добавленные значения, поскольку они попадают в другой массив от "реальных" атрибутов. не могу удалить свой upvote, хотя, поскольку мне нужно будет отредактировать ответ, но не могу предложить никакого понимания, кроме сортировки его через php.
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/21051410#comment68815644_21051410
Вы нашли какое-либо решение этой проблемы? @RedSash
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/21051410#comment71690000_21051410
Попробуйте использовать фреймворк Laravel пользовательские разбиение на страницы
Philipp

06.11.2019 03:55:01

При работе с атрибутами они не всегда доступны мгновенно (например, для недавно созданных моделей).

В качестве расширения ответа Ayobami Opeyemi вы должны иметь возможность использовать sortBy коллекции, если вы заставляете атрибут оценивать, вызывая его функцию напрямую:

$products = Product::all();
$products = $products->sortBy(function($product){
    return $product->getTotalAttribute();
});

https://laravel.com/docs/master/collections#method-sortby

guizo

05.12.2019 06:53:47

$products = Product::all();
$products = $products->sortBy('total');
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/59187998#comment104595755_59187998
Ответы только на код не особенно полезны. Пожалуйста, включите краткое описание того, как этот код решает проблему.
https://stackoverflow.com/questions/21050476/how-to-order-by-using-appended-attribute-in-laravel/59187998#comment104595857_59187998
Это работает, если вы используете all(), но он ломается, если вы используете разбиение на страницы.
Закрыть X