چگونه می توان نتایج Eloquent را توسط ویژگی‌های Mutator مرتب کرد؟

ویژگی‌های Mutator در لاراول به شما این امکان را می‌دهند که بتوانید نتایج حاصل از‌ Eloquent را فرمت کنید.


در طراحی سایت با فریم ورک لاراول،  شما می‌توانید در مدل‌های Eloquent برنامه خود، فیلدهای بسیاری را در که به صورت پویا محاسبه می‌شوند، تعریف کنید. اما نمی‌توان خصوصیت OrderBy را روی آن‌ها اعمال کرد. چگونه می‌توان عمل مرتب سازی را بر روی این فیلدها انجام داد؟ می‌توان از ویژگی‌های Mutators در لاراول برای این منظور استفاده کرد.

فرض کنید، شما مدل Client.php و فیلدهای first_name و last_name را دارید. می‌توانید خصوصیت full_name را به صورت زیر تعریف کنید:

function getFullNameAttribute()
{
return $this->attributes['first_name'] . ' ' . $this->attributes['last_name'];
}

سپس، در زمان انجام $clients = Client::all();، می‌توانید از آن به صورت زیر استفاده کنید:

@foreach ($clients as $client)
{{ $client->full_name }}
@endforeach

اما اگر بخواهید نتایج را براساس full_name مرتب کنید، در صورت استفاده از orderBy یک خطا برگردانده می‌شود:

$clients = Client::orderBy('full_name')->get(); // doesn't work

راه حل این موضوع، کاملا ساده است. ما باید نتایج را پس از آنکه آن‌ها را دریافت کردیم، با استفاده از تابع sortBy به صورت زیر مرتب کنیم.

$clients = Client::get()->sortBy('full_name'); // works!

توجه داشته باشید که توابعی که استفاده می‌شوند، sortBy و همچنین ()sortByDesc است.

$clients = Client::get()->sortByDesc('full_name');

مقالات کاربردی مشابه لاراول در لیداوب:

نکته اینجاست که تابع sortBy با نتایج Eloquent کار می‌کند که یک مجموعه یا collection است. می‌توانید اطلاعات بیشتر درباره تابع sortBy و دیگر توابع Collection را در مستندات لاراول به دست آورید. می‌توانید مقالات مفید و کاربردی مشابه لاراول را در کتابخانه آنلاین لیداوب دنبال کنید.