조반 :
나는 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를 그룹에이 datas을 함께 date
:
->get()->groupBy('date');
셋째, 값 'IQ_CLOSEPRICE', 'IQ_TRADES'
의 열 이름이 아닌 stock_history
, 열 존재 mnemonic
의 값. 당신이 키로를 얻고 싶은 경우에, 당신은 사용할 수 있습니다 뽑는다 는 다음과 같이 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();