2017-06-06 3 views
0

私は3つのチェックボックスのリストから少なくとも1つのオプションを選択した後、選択したオプション(チェックボックス)のクエリを書く必要があるフィルタ検索のコードを書いています。私のコードを実行しようとすると、私は "array_map()を取得しています:引数2は配列でなければなりません"。なぜ複雑なクエリを実行中に "array_map():引数2が配列でなければならない"というエラーが表示されるのですか?

私の形式は次のとおりです。

<form id="statistics" method="post" action="{{ action('[email protected]') }}""> 
<div class="form-group"> 
<label><input type="checkbox" value="suppliers" name="suppliers">suppliers</label> 
</div> 
<div class="form-group"> 
<label><input type="checkbox" value="campaign" name="campaign">campaign</label> 
</div> 
<div class="form-group"> 
<label><input type="checkbox" value="clients" name="clients">clients</label> 
</div> 
<div class="form-group"> 
<label for="start_date">From:</label><input type="text" name="startdate" id="startdate"> 
</div> 
<div class="form-group"> 
<label for="start_date">From:</label><input type="text" name="enddate" id="enddate"> 
</div> 
<div class="form-group"> 
<button type="submit" id="process" class="btn btn-primary submit">Run Report</button> 
</div> 

私のクエリは以下の通りです:

if($request->suppliers == 'suppliers'){ 
     $results->leftjoin('suppliers AS s', 's.id', '=', 'l.supplier_id') 
       ->select('s.name AS Supplier') 
       ->groupBy('s.name') 
       ->orderBy('s.name'); 
    } 
if($request->campaign == 'campaign'){ 
     $results->leftjoin('campaigns AS c', 'c.id', '=', 'l.campaign_id') 
       ->select('c.name AS Campaign') 
       ->groupBy('c.name') 
       ->orderBy('c.name'); 
    } 
if($request->clients == 'clients'){ 
     $results->leftjoin('clients AS cl', 'cl.id', '=', 'l.client_id') 
       ->groupBy('cl.name') 
       ->orderBy('cl.name'); 
    } 
$results->whereBetween('l.received', [$start, $end]) 
     ->groupBy('l.disposition')   
     ->orderBy('l.disposition') 
     ->get()->toArray(); 
$count = count($results); 
if($count > 0) 
{ 
$results = array_map(function ($value) { 
      return (array)$value; 
     }, $results); 
Excel::create('Statistics', function($excel) use($results) { 
      $excel->sheet('Statistics', function($sheet) use($results) { 
       $sheet->fromArray($results); 
      }); 
     })->download('csv'); 
    } 

私は上記のコードを実行すると、私は)「にarray_map(のようなアンエラーを取得しています:引数2は配列でなければなりません "

以下のような通常のクエリで罰金をする:

$results = DB::table('lead_audit AS l') 
     ->leftjoin('suppliers AS s', 's.id', '=', 'l.supplier_id') 
     ->leftjoin('campaigns AS c', 'c.id', '=', 'l.campaign_id') 
     ->select('s.name AS Supplier', 'c.name AS Campaign', 'l.disposition AS Disposition') 
     ->whereBetween('l.received', [$start, $end]) 
     ->groupBy('s.name', 'c.name', 'l.disposition') 
     ->orderBy('s.name') 
     ->orderBy('c.name') 
     ->orderBy('l.disposition') 
     ->get()->toArray(); 
$count = count($results); 

は誰もが、これを整理する方法を感謝しhelpmeてくださいすることができます。

答えて

0

$ resultsは配列ではなく、単なるクエリです。あなたは上記のコードでは、コード

$results->whereBetween('l.received', [$start, $end]) 
    ->groupBy('l.disposition')   
    ->orderBy('l.disposition') 
    ->get()->toArray(); 
$count = count($results); 
if($count > 0) 
{ 
$results = array_map(function ($value) { 
      return (array)$value; 
     },$queryResults); 

を以下に

$queryResults = $results->whereBetween('l.received', [$start, $end]) 
    ->groupBy('l.disposition')   
    ->orderBy('l.disposition') 
    ->get()->toArray(); 
$count = count($results); 
if($count > 0) 
{ 
$results = array_map(function ($value) { 
      return (array)$value; 
     }, $results); 

以下のコードを変更する必要があり、私はその後 array_mapを関数に渡し、変数$ queryResultsにクエリの結果を割り当てます。

+0

ありがとう@PhongTranは魅力的に働いた。私はlaravel 5.4に新しいビーですので、私は問題に直面しています。これは私の非常に小さな間違いですが、私は1日を無駄にしました。私のような他の開発者もこのタイプの問題に直面しているのではないかと思います。どうもありがとうございました。乾杯。 –

+0

@prasadchinthala Laravelで始まったときに私はその問題を抱えていました。あなたが期待していない結果が得られたら、デバッグにdd()を使っています。 https://laravel.com/docs/5.4/helpers#method-dd –

+0

Thanks FYI。 Stackoverflowのおかげで開発者のための非常に良いブログです。他人を助けてくれるハッピーコーディング@ PhongTran –

関連する問題