ジョーバン:
私は、MySQLのテーブルが呼び出されstock_history
、このようなことに見える何かを:
id | date | mnemonic | value
---------------------------------------
1 | 2020-01-21 | IQ_CLOSEPRICE | 147.15
2 | 2020-01-22 | IQ_CLOSEPRICE | 149.31
3 | 2020-01-23 | IQ_CLOSEPRICE | 150.11
4 | 2020-01-21 | IQ_TRADES | 323
5 | 2020-01-22 | IQ_TRADES | 542
6 | 2020-01-22 | IQ_TRADES | 712
7 | 2020-01-21 | IQ_PAYOUTS | 23
それが戻ってくるクエリ構築することが可能であるIQ_CLOSEPRICE
とIQ_TRADES
日付をキーと日付の範囲の行を、?
私が取得したい場合たとえば、IQ_CLOSEPRICE
およびIQ_TRADES
範囲のため2020-01-21
に2020-01-22
、それはのようなものを返す必要があります:
[
'2020-01-21' => [
'IQ_CLOSEPRICE' => 147.15,
'IQ_TRADES' => 323
],
'2020-01-22' => [
'IQ_CLOSEPRICE' => 149.31,
'IQ_TRADES' => 542
],
]
もちろん、次のように、その自然の構造にデータを返すために簡単です:
StockHistory::where('date', '>=', '2020-01-21')
->where('date', '<=', '2020-01-22')
->whereIn('mnemonic', ('IQ_CLOSEPRICE', 'IQ_TRADES')
->get();
しかし、私は雄弁が可能な場合は、クエリ結果を受け取った後にリスト全体をループから私を救うために上記の構造を返すようにしたいと思います。そうでなければ、我々は、日付によってキーイングなしで行うことができますが、それは次のように、同じ配列要素に少なくともプットIQ_CLOSEPRICEとIQ_TRADESに素晴らしいことです。
[
[
'IQ_CLOSEPRICE' => 147.15,
'IQ_TRADES' => 323,
'date' => '2020-01-21'
],
[
'IQ_CLOSEPRICE' => 149.31,
'IQ_TRADES' => 542
'date' => '2020-01-22'
],
]
Tsakhog:
まず、コードで何かが間違ってwhereIn
、配列を使用してみてください:
->whereIn('mnemonic', ['IQ_CLOSEPRICE', 'IQ_TRADES'])
第二に、あなたは、コレクションの使用することができますGROUPBYをグループにこれらの件のデータをとdate
:
->get()->groupBy('date');
第三に、値は'IQ_CLOSEPRICE', 'IQ_TRADES'
の列名ではありませんstock_history
、列があるmnemonic
の価値観。あなたがキーとしてそれらを取得したい場合は、使用することができますPluckの、このようmnemonic
の値は、鍵となるとvalue
の値が値になります。
->pluck('value', 'mnemonic'); // return ['IQ_CLOSEPRICE' => 147.15,...]
このように見えるためにあなたのコードの必要性はそれほど:
StockHistory::where('date', '>=', '2020-01-21')
->where('date', '<=', '2020-01-22')
->whereIn('mnemonic', ['IQ_CLOSEPRICE', 'IQ_TRADES'])
->get()
->groupBy('date')
->map(function($item) {
return $item->pluck('value', 'mnemonic');
})->toArray();