Как заказать с помощью добавленного атрибута в Laravel
Я создал атрибут 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
Является ответом!

10.01.2014 10:10:52
orderBy принимает фактическое поле базы данных, а не добавленное
попробовать это
$products = Product::all();
$products = $products->sortBy(function($product){
return $product->total;
});

Спасибо, это потрясающе, и я попытался изменить результат, используя
return -$product->total
он тоже работает.

Казалось, что это сработало и проголосовало, но после нескольких попыток это действительно не похоже. как только у вас есть коллекция, sortBy, похоже, не имеет никакого эффекта ни с закрытием, ни с сортировкой коллекции через атрибут append (который появляется в каждом объекте в коллекции). Похоже, что это может быть проблема с коллекциями, которые игнорируют добавленные значения, поскольку они попадают в другой массив от "реальных" атрибутов. не могу удалить свой upvote, хотя, поскольку мне нужно будет отредактировать ответ, но не могу предложить никакого понимания, кроме сортировки его через php.

Вы нашли какое-либо решение этой проблемы? @RedSash

Попробуйте использовать фреймворк Laravel пользовательские разбиение на страницы

06.11.2019 03:55:01
При работе с атрибутами они не всегда доступны мгновенно (например, для недавно созданных моделей).
В качестве расширения ответа Ayobami Opeyemi вы должны иметь возможность использовать sortBy коллекции, если вы заставляете атрибут оценивать, вызывая его функцию напрямую:
$products = Product::all();
$products = $products->sortBy(function($product){
return $product->getTotalAttribute();
});

Помочь в развитии проекта: