가격별로 제품을 오름차순으로 정렬하는 방법
P粉781235689
2023-07-31 13:29:25
<p>가격별 오름차순으로 제품을 정렬하는 방법입니다. 가격은 모델 제품에서 가져온 가격에 모델 팩에서 가져온 볼륨을 곱하여 계산됩니다. Laravel에서 모든 제품의 가격을 표시하는 방법입니다. </p>
<pre class="brush:php;toolbar:false;">ceil(
(
$product->팩->count() >
? $product->팩->sortBy('pivot.add_time')->first()->볼륨
: 1
) * $제품->가격
)</pre>
<p>이 코드를 사용해 보았으나 오류가 발생했습니다. </p>
<인용문>
<p>정의되지 않은 속성: IlluminateDatabaseQueryBuilder::$pack</p>
</인용문>
<pre class="lang-php Prettyprint-override"><code>if ($request->get('sort') == 'sort-price_desc') {
$products = 제품::orderBy(
함수($제품) {
천장 반환(
($product->packs->count() > 0
? $product->팩->sortBy('pivot.add_time')->first()->볼륨
: 1) * $제품->가격
);
}
)->get();
}<span style="font-family:'sans serif, tahoma, verdana, helvetica';"><span style="white-space:nowrap;"> </span></span>
<p><br /></p>
Laravel의 Eloquent ORM의 orderBy 메소드는 대체 기능을 지원하지 않으므로 코드가 올바르지 않습니다. 대신 열 이름과 정렬 방향(오름차순 또는 내림차순)을 인수로 예상합니다. 귀하의 시나리오에서는 orderBy를 사용하여 직접 달성할 수 없는 약간 복잡한 계산 값을 기반으로 제품을 정렬하려고 합니다.
채택할 수 있는 한 가지 전략은 이 필드를 미리 계산하여 제품 테이블에 저장한 다음 이 필드를 기준으로 정렬하는 것입니다. 또는 제품을 먼저 검색한 다음 메모리에서 정렬할 수도 있습니다.
메모리에서 이를 수행하는 방법은 다음과 같습니다.
으아악이 코드는 먼저 모든 제품과 관련 포장을 검색합니다. 그런 다음 컬렉션은 사용자가 제공한 계산에 따라 메모리에서 정렬됩니다.