Laravel сортировка объекта по ключу

У меня есть следующее, что я хотел бы упорядочить в алфавитном порядке по ключу, т. Е. Сначала для каждой группы массивов будет «bname», а затем «create_at».

{
"leads": [
{
"lead_id": 1,
"zoho_lead": null,
"bname": "ABC Limited",
"tname": "ABC",
"source_id": 11,
"industry_id": 1,
"user_id": 1,
"created_at": "2017-09-06 15:54:21",
"updated_at": "2017-09-06 15:54:21",
"user": "Sean McCabe",
"source": "Unknown",
"industry": "None"},
{
"lead_id": 2,
"zoho_lead": 51186111981,
"bname": "Business Name Limited",
"tname": "Trading Name",
"source_id": 11,
"industry_id": 1,
"user_id": 1,
"created_at": "2017-06-01 12:34:56",
"updated_at": null,
"user": "John Doe",
"source": "Unknown",
"industry": "None"}
]
}

Я пытаюсь использовать ksort так в цикле foreach:

class LeadController extends Controller
{
use Helpers;

public function index(Lead $leads)
{
$leads = $leads->all();

foreach($leads as $key => $lead){
$lead->user = User::where('id', $lead->user_id)->first()->name;
$lead->source = Source::where('id', $lead->source_id)->first()->name;
$lead->industry = Industry::where('id', $lead->industry_id)->first()->name;

$lead->ksort();
}

return $leads;
}

Но я получаю следующую ошибку:

Call to undefined method Illuminate\\Database\\Query\\Builder::ksort()

Как мне использовать эту функцию, или Laravel способ сделать это, или лучший способ вообще?

Благодарю.

0

Решение

Удалось заставить его возвращаться с ключами в алфавитном порядке, поэтому ниже приводится решение на тот случай, если это потребуется кому-то другому:

public function index(Lead $leads)
{
$leadOut = Array();

$leads = $leads->all();

foreach($leads as $key => $lead){
$lead->user = User::where('id', $lead->user_id)->first()->name;
$lead->source = Source::where('id', $lead->source_id)->first()->name;
$lead->industry = Industry::where('id', $lead->industry_id)->first()->name;

//Convert to Array
$leadOrder = $lead->toArray();
//Sort as desired
ksort($leadOrder);
//Add to array
$leadOut[] = $leadOrder;
}

return $leadOut;
}

Вероятно, есть более чистый способ сделать это, но он работает для моего случая, и, возможно, могут быть размещены дополнительные ответы, которые лучше.

1

Другие решения

Вы могли бы сделать что-то вроде:

return Lead::with('user', 'source', 'industry')->get()->map(function ($lead) {

$item = $lead->toArray();

$item['user'] = $lead->user->name;
$item['source'] = $lead->source->name;
$item['industry'] = $lead->industry->name;

ksort($item);

return $item;
});

Это должно быть гораздо более эффективным, поскольку оно будет загружать отношения, а не делать 3 дополнительных запроса для каждой итерации.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector