我正在使用Laravel构建货币库存网络应用。
我在users
中组织了表,其中用户可能有很多accounts
,这是通过account_user
表进行的多对多关系。每个帐户都有transactions
的记录。一个帐户有很多交易。
在transactions
表中,我存储了帐单和数量。因此, transactions 表具有以下列:
在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
...
我收到以下错误:
此集合实例上不存在属性[transaction_number]。
问题 我的问题是,当我将collect函数应用于数组时,它实际上并没有将所有内容都转换为collection,仍然剩下数组!我向您展示了产生的转储:
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"
]
}
]
}
如您所见,集合中仍然有数组,这就是为什么我仍然遇到该错误的原因
我目前reading this post of a forum可能与我的问题有关。
那我想念什么?
答案 0 :(得分:1)
我想您已将集合更改为数组。在刀片中,您也可以像这样
进行调试@foreach($balances as $balance)
{{dd($balance)}}
@endforeach
那么我希望您必须像下面那样使用它
<td>{{ $balance['transaction_number'] }}</td>