Я работаю над созданием веб-приложения для инвентаризации денег с помощью Laravel.
Я организовал таблицы в users
, где у пользователя может быть много accounts
, что является отношением многих ко многим.через таблицу account_user
.Для каждой учетной записи есть записи для transactions
.В аккаунте много транзакций.
В таблице transactions
я храню счет и количество.Итак, таблица транзакций имеет следующие столбцы:
- account_id
- bill_id
- datetime
- номер_ транзакции
- количество
Внутри таблицы bills
столбец name относится к номиналу счета, то есть к 20 счету => как счет в 20 долларов США,и т. д.
В AccountController@show
я делаю следующее:
public function show($id)
{
$account = Account::findOrFail($id);
//Get the transactions IDs
$transaction_numbers = $account->transactions->map(function ($item,$key){
//dump($item->id);
return $item->transaction_number;
});
//$transaction_numbers = [1,2,3, ...];
$transaction_numbers = $transaction_numbers->unique()->flatten();
$balances=$transaction_numbers->map(function ($item,$key){
$total = Transaction::with('bill')->where('transaction_number',$item)->get()->reduce(function ($total, $item) {
return $total + ($item->bill->name * $item->quantity);
});
//echo 'Tot: '.$total.'. Transaction ID: '.$item.'<br>';
//THE PROBLEM COMES HERE
return ['transaction_number'=>$item,'balance'=>$total];
});
//Now I want to add the date to the array and collection
$balances_array = $balances->toArray();
$balances_tmp=[];
foreach ($balances_array as $key=>$balance){
//https://stackoverflow.com/a/46939910/1883256
$date_time=DB::table('transactions')->where('transaction_number',$balance['transaction_number'])->take(1)->select('date_time')->pluck('date_time')->first();
$balance['date_time']=$date_time;
dump($balance);
$balances_tmp[]=collect(['transaction_number'=>$balance['transaction_number'],'balance'=>$balance['balance'],'date_time'=>$date_time]);
}
//dd($balances_tmp);
$balances = collect($balances_tmp);
dd($balances);
return view('accounts.account_show',[
'account' => $account,
'balances' => $balances,
]);
}
Теперь, когда я пытаюсь в представлении выполнить итерацию и отобразить данные в таблицеПримерно так:
...
@foreach($balances as $balance)
<tr>
<th scope="row">1</th>
<td>{{ $balance->transaction_number }}</td>
<td>{{ $balance->balance }}</td>
@endforeach
...
Я получаю следующую ошибку:
Свойство [номер_транзакции] не существует в этом экземпляре коллекции.
Проблема Моя проблема в том, что когда я применяю функцию сбора к массиву, он на самом деле не преобразует все в коллекцию, а массив все еще остается!Я показываю вам полученный дамп:
Collection {#336 ▼
#items: array:3 [▼
0 => Collection {#276 ▼
#items: array:3 [▼
"transaction_id" => "1"
"balance" => 122220
"date" => "2019-07-02 19:52:22"
]
}
1 => Collection {#373 ▼
#items: array:3 [▼
"transaction_id" => "2"
"balance" => 155350
"date" => "2019-07-02 20:24:44"
]
}
2 => Collection {#272 ▼
#items: array:3 [▼
"transaction_id" => "3"
"balance" => 113980
"date" => "2019-07-02 20:27:25"
]
}
]
}
Как видите, в коллекции все еще есть массивы, и поэтому я все еще получаю эту ошибку
В настоящее время я читая этот пост на форуме , который может относиться к моей проблеме.
Что мне тогда не хватает?