Выполните несколько запросов, если это необходимо, в пакете Excel Maatwebsite, Laravel - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь экспортировать Excel из базы данных в Laravel.То, что я хочу сделать, это форма, с помощью которой администратор может выбрать «От», «Кому», «Тип бронирования» и «Тип пользователя».От и до даты, тип бронирования подобен «Забронировано» или «Отменено», а «тип пользователя» - «Нормальный» или «Агент».

Когда администратор выбирает из этого любые потребности, например, когда администратор выбирает дату из, от и до, а затем выбирает отмененныйи агент и нажмите кнопку экспорта, они должны получить Excel.И точно так же они могут выполнять разные запросы.

До сих пор я достиг совершенства, используя три параметра, такие как 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);
}

И важно то, что некоторое время администратор может выбирать только из и в, и им не нужнодва других варианта.Итак, как в этой ситуации выполнить только одну функцию запроса?Я передаю их от a к контроллеру и затем классу maatwebsite.Так что я спрашиваю, как сделать запрос, который выполняет только то, что было отправлено?

Если мы отправляем только и только, то это должно выполняться только, и если мы отправили три параметра, то это должно выполняться какмудрый!надеюсь все понимают.Дайте мне знать, если что-нибудь понадобится.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы должны создать свои условия из-за входных параметров.

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();
}
0 голосов
/ 22 сентября 2018

надеюсь, это поможет вам, если не, дайте мне знать

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...