为什么在 运行 复杂查询时出现 "array_map(): Argument #2 should be an array" 错误?
why getting "array_map(): Argument #2 should be an array" error while running complex query?
我正在编写过滤器搜索代码,用户从 3 个复选框列表中选择至少一个选项,然后我必须为所选选项(复选框)编写查询。如果我尝试 运行 我的代码然后我得到 "array_map(): Argument #2 should be an array".
我的表格是:
<form id="statistics" method="post" action="{{ action('MyController@store') }}"">
<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(): Argument #2 should be an array"
这样的错误
正常查询正常,如下所示:
$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);
谁能帮我解决这个问题,谢谢。
看起来 $results 只是一个查询而不是数组。您需要更改为以下代码
$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);
到下面的代码
$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,然后将其传递给array_map功能。
我正在编写过滤器搜索代码,用户从 3 个复选框列表中选择至少一个选项,然后我必须为所选选项(复选框)编写查询。如果我尝试 运行 我的代码然后我得到 "array_map(): Argument #2 should be an array".
我的表格是:
<form id="statistics" method="post" action="{{ action('MyController@store') }}"">
<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(): Argument #2 should be an array"
这样的错误正常查询正常,如下所示:
$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);
谁能帮我解决这个问题,谢谢。
看起来 $results 只是一个查询而不是数组。您需要更改为以下代码
$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);
到下面的代码
$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,然后将其传递给array_map功能。