【发布时间】:2021-06-01 22:44:34
【问题描述】:
我是第一次开发 laravel 的新手。 我的目标是显示一些过滤后的事件,过滤器应该一起工作('filter 1' AND 'filter2' ecc..),即使有些是空的。 我遇到的问题是,当我的过滤器字段为空时,查询不会返回任何事件。 我的控制器代码:
<?php
namespace App\Http\Controllers;
use App\Event;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Mockery\Matcher\Not;
use phpDocumentor\Reflection\Types\Nullable;
use Symfony\Component\HttpFoundation\Response;
use App\RequestController;
class EventsController extends Controller
{
public function index(){
$eventi= Event::paginate(4);
return view('CatalogoEventi',compact('eventi'));
}
public function mostraSingoloEvento($id){
$singoloevento=Event::findOrFail($id);
return view('PagineDinamiche/InformazioniEvento',['singoloevento'=>$singoloevento]);
}
public function searchEvent(){
$data = request('data');
$regione = request('regione');
$societa = request('società');
$desc = request('descrizione');
/*
$eventi = DB::table('users');
if($desc!=null)
$eventi = $eventi->where('anteprima',$desc);
if($data!=null)
$eventi = $eventi->where('data',$data);
if($regione!=null)
$eventi = $eventi->where('regione',$regione);
if($societa!=null)
$eventi = $eventi->where('società',$societa);
return view('CatalogoEventi', ['eventi'=>$eventi]); */
$eventi = DB::table('events')
->where('anteprima','=',$desc)
->where('data', '=' , $data)
->where('regione', '=' , $regione)
->paginate(4);
/* ->where('società', '=' , $societa) */
return view('CatalogoEventi',['eventi'=>$eventi]);
}
/*
public function createEvent(){
return redirect('/CatalogoEventi');
}
*/
}
更详细
public function searchEvent(){
$data = request('data');
$regione = request('regione');
$societa = request('società');
$desc = request('descrizione');
$eventi = DB::table('events')
->where('anteprima','=',$desc)
->where('data', '=' , $data)
->where('regione', '=' , $regione)
->paginate(4);
return view('CatalogoEventi',['eventi'=>$eventi]);
}
我的观点 CatalogoEventi:
@extends('layouts.Public')
@section('title', 'Catalogo Eventi')
<!-- CatalogoEventi -->
@section('content')
<!-- RICERCA START -->
<style>
label{
color: white;
font-size: 25px;
background-image:image('/public/css/images/promo/p1.jpg') ;
max-width: 250px;
}
input{
padding: 10px;
font-size: 15px;
max-width: 300px;
}
select{
padding: 10px;
}
</style>
<div class="events parallax-one pad" id="events">
<div class="container">
<!-- default heading -->
<div class="default-heading-shadow">
<!-- heading -->
<h2>Catalogo Eventi</h2>
</div>
<!-- events element -->
<div class="events-element">
<!-- BARRA DI RICERCA -->
<!-- RICERCA -->
<div class="container">
<!-- Collect the nav links, forms, and other content for toggling -->
<form name="Ricerca" action="/grp_15f/public/CatalogoEventi/ricerca" method="POST">
@csrf
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<label for="descrizione" class="col-md-4 col-form-label text-md-right">{{ __('Descrizione ') }}</label>
<input type="text" name="descrizione" id="Descrizione" placeholder="Descrizione">
<br><br>
<label for="Data" class="col-md-4 col-form-label text-md-right">{{ __('Data ') }}</label>
<input type="date" name="data" id="Data" placeholder="Mese ed Anno(MM/AAAA)">
<br><br>
<label for="Regione" class="col-md-4 col-form-label text-md-right">{{ __('Regione') }}</label>
<input type="text" name="regione" id="Regione" placeholder="Regione">
<br><br>
<label for="Società" class="col-md-4 col-form-label text-md-right">{{ __('Società') }}</label>
<select name="società">
<option value="NEXT EVENTI">NEXT EVENTI</option>
<option value="Pincopallino srl">Pincopallino srl</option>
<option value="Steposkrt spa">Steposkrt spa</option>
</select>
<!-- FUNZIONE RICERCA DA IMPLEMENTARE -->
<input type="submit" name="tasto_cerca" value="Cerca">
</div>
</form>
<!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
<!--/ RICERCA END -->
<!-- CATALOGO EVENTI -->
<div class="row">
@foreach ($eventi as $event)
<div class="col-md-6 col-sm-6">
<!-- event item -->
<div class="events-item">
<!-- image container -->
<div class="figure">
<!-- event date -->
<div class="event-date">
<!-- DA MODIFICARE -->
<span class="emonth">Data: {{ $event->data }}</span>
<div class="clearfix"></div>
</div>
<!-- event location -->
<span class="event-location"><i class="fa fa-map-marker"></i> Luogo:{{ $event->luogo }} </span>
<!-- image -->
@include('PagineDinamiche/eventImage', ['attrs' => 'imagefrm', 'imgFile' => $event->immagine])
<!-- image hover -->
<div class="img-hover">
<!-- hover icon -->
<a href="{{ route('infoEvento',['id'=>$event->id]) }}"><i class="fa fa-play-circle"></i></a>
</div>
</div>
<!-- event information -->
<div class="event-info">
<!-- event title -->
<h3>Titolo: {{ $event->nome }}</h3>
<!-- horizontal line --><hr />
<!-- paragraph -->
<p> Descrizione Breve: {!! $event->anteprima !!} </p>
<a href="{{ route('infoEvento',['id'=>$event->id]) }}">Scopri di piu..</a>
</div>
</div>
</div>
@endforeach
</div>
</div>
</div>
<!--Paginazione-->
@include('pagination.paginator', ['paginator' => $eventi])
</div>
@endsection
我的路线
//CATALOGO EVENTI
Route::get('/CatalogoEventi','EventsController@index')
->name('catalogoEventi');
//ROTTA RICERCA
Route::any('/CatalogoEventi/ricerca','EventsController@searchEvent');
result from the query abovewith field 'regione' not empty and others empty
如果我只使用这个
$eventi = DB::table('events')
->where('regione', '=' , $regione)
->paginate(4);
实际上我得到了一些结果,我可以显示它们(有些问题是指分页器,但这不是主要问题)。 我认为我应该修复查询(我想这样做)以完成所有工作但现在我不知道。
【问题讨论】:
-
您可以使用
when添加conditional clauses 例如->when($desc, function ($q, $desc) { $q->where('anteprima','=',$desc); }) -
@Steposkrt 你的注释代码很好。只是做了一些改进。而不是
if($desc!=null)使用if(isset($desc))在你的情况下,这些可行的可能不是空的,而是空字符串。 或而不是if($desc!=null)使用if(request()->filled('descrizione'))