首页 > 解决方案 > 查询中的错误数据,Laravel

问题描述

我尝试使用在 excel 中导出一些数据Maatwebsite\Excel。同样从前端我传递了一些参数,问题是dd()我得到了正确的数据,但在 excel 文件中我得到了错误的数据(通常没有或所有来自 db 的行。)

我的__construct()

    public function __construct($req) {
        $this->request= $req;
     }

查询:

    public function query()
        {
            $direction = ($this->request->sort_direction === 'false') ? 'asc' : 'desc';

            $query = ViewData::query();


            if ($this->request->has('search_gender') && !is_null($this->request->search_gender)) {
                $query->where('gender', '=', $this->request->search_gender );
            }
            // HERE I get some strange things..
            // ($this->request->search_gender === "F")  -> if I use "F", works, if I use $this->request->search_gender , don't!
            // also if I use $this->request->search_gender, in dd($query->get()); I get correct data, in excel file I get wrong data


            if(!$this->request->sort_by){
                $this->request->sort_by = "full_name";
            }

            $query->orderBy($this->request->sort_by, $direction);

            return $query;
        }

我的控制器:

    //  Export CSV data
    public function export(Request $request) 
    {
        return (new DataExport($request))->download('data.xlsx');
    }

使用实际查询更新:

     array:3 [

              "query" => "select * from "view_full_data" where "gender" = ? order by "full_name" desc"
              "bindings" => array:1 [
                0 => "M"
              ]
              "time" => 34.7
            ]

标签: laravelpostgresqlmaatwebsite-excel

解决方案


编辑 1:以下Maatwebsite\Excel文档:

阅读文档,我相信我理解了您的query()要求。那是一个implementsInvoicesExport

按照官方文档,我相信您需要创建一个构造函数参数以在您的where. 按照文档示例:

namespace App\Exports;

use App\Invoice;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function __construct(int $year)
    {
        $this->year = $year;
    }

    public function query()
    {
        return Invoice::query()->whereYear('created_at', $this->year);
    }
}

并按如下方式导出您的数据:

return (new InvoicesExport(2018))->download('invoices.xlsx');

原来的:

如果我理解这个问题,可能是这样的:

?一个绑定值。

如果您在转储中看到:

"bindings" => array:1 [
    0 => "M"
]

您认为您的查询将解析此值并?用相应的值替换您的值。

如果你想得到你的原始 sql,试试这个:

dd($query->toSql());

您可以查看您的绑定值是否会被解析。您可以检查查询是否以正确的方式构建。


推荐阅读