如果需要,在Maatwebsite Excel软件包Laravel中执行多次查询

时间:2018-09-22 05:49:40

标签: laravel laravel-5

我正在尝试从laravel中的数据库导出excel。我想做的是,有一种表单,管理员可以通过该表单选择“发件人”,“收件人”,“书本类型”和“用户类型”。 “从”和“到”是日期,预订类型类似于“已预订”或“已取消”,而userype是“正常”或“代理商”。

当管理员从中选择任何类型的需求时,例如,当管理员从中从中选择日期,然后从中选择取消日期,然后选择Agent并按Export按钮时,他们应该会表现出色。同样,他们可以执行不同的查询。

到目前为止,我已经通过使用三个参数(例如from,to和bookingtype)获得了卓越的表现。但是如何同时使用第四个参数(用户类型)呢?

这是我的代码:

public function query()
{
    $from = $this->from;
    $to = $this->to;
    $bookingtype = $this->bookingtype;
    $usertype = $this->usertype;

    return Booking::query()->whereBetween('createdAt',[$from, $to])->where('status', '=', $bookingtype);
}

重要的是,有时管理员只能选择from和to,而他们不需要其他两个选项。因此,在那种情况下,如何仅使用一个查询功能执行该操作?我将这些从a传递到控制器,然后再传递maatwebsite类。所以我要问的是,如何进行仅执行已发送内容的查询?

如果我们单独发送和发送,那么那应该只执行,如果我们发送三个参数,那应该像明智地执行!希望大家理解。让我知道是否需要任何东西。

2 个答案:

答案 0 :(得分:1)

希望这对您有所帮助

$bokingQuery = Booking::query();
$from = $this->from;
$to = $this->to;
if(isset($from) && isset($to))
$bokingQuery->whereBetween('createdAt',[$from, $to]);
$bookingtype = $this->bookingtype;
if(isset($bookingtype ))
$bokingQuery->where('status',$bookingtype);
$usertype = $this->usertype;
if(isset($usertype)) //
$bokingQuery->whereHas('usertype',, function($query) use ($usertype) {
    $query->whereUserType($usertype);
});
$bokingQuery->get();

答案 1 :(得分:0)

必须通过输入参数来创建条件。

public function query(){
    $conditions=[];

    if(isset($this->from) && $this->from){
        $conditions[]=['createdAt', '>=', $this->from];
    }

    if(isset($this->to) && $this->to){
        $conditions[]=['createdAt', '<=', $this->to];
    }

    if(isset($this->bookingtype) && $this->bookingtype){
        $conditions[]=['status', $this->bookingtype];
    }

    if(isset($this->usertype) && $this->usertype){
        $conditions[]=['usertype', $this->usertype];
    }


    return Booking::where($conditions)->get();
}