你好,我建立了一个过滤系统 因此,我有一个选择框,可以在其中选择选项,然后单击一个按钮,然后转到另一个页面,我可以在其中看到所有结果。
这是我控制器的一部分
public function getValues(Request $request){
$typ=$request->get('typ');
$stellentyp=$request->get('stellentyp');
$bereich=$request->get('bereich');
$abschluss=$request->get('abschluss');
$view = 'user.'.$stellentyp;
$row = DB::table('angebots')
->where('stellentyp', $stellentyp)
->count();
$fwds = DB::table('angebots')
->where('stellentyp', 'Freiwilligendienst')
->where('typ', $typ)
->where('bereich', $bereich)
->where('abschluss', $abschluss)
->orderBy('stellenname', 'asc')
->get();
$jobs = DB::table('angebots')
->where('stellentyp', 'Job')
->where('typ', $typ)
->where('abschluss', $abschluss)
->where('bereich', $bereich)
->orderBy('stellenname', 'asc')
->get();
但是我现在有一个问题 我希望如果我的字段为空,则不应该过滤
像这样
if(empty($request->get('typ'))){}
else{->where('typ', $typ)}
但是它不起作用我不知道如何使用if / else来收集数据库条目? 有谁知道它如何工作?
谢谢!
我这样更改了我的功能,但出现错误
public function getValues(Request $request){
$typ=$request->get('typ');
$stellentyp=$request->get('stellentyp');
$bereich=$request->get('bereich');
$abschluss=$request->get('abschluss');
$user = DB::table('users')->get();
$angebots = DB::table('angebots') ->orderBy('stellenname', 'asc');
if(!empty($request->get('stellentyp'))){
$angebots->where('stellentyp', $stellentyp);
}
$angebots->get();
$row = $angebots->count();
return view('user/angebots', compact('typ', 'stellentyp', 'bereich', 'abschluss', 'row', 'angebots', 'user'));
}
如果我把得到的东西放在这样的地方
$angebots = DB::table('angebots') ->orderBy('stellenname', 'asc')->get();
我没有错误,但是如果我在显示此错误的地方放了它,
未定义的属性:Illuminate \ Database \ MySqlConnection :: $ firma(视图:C:\ wamp \ sites \ j4ylara \ resources \ views \ user \ angebots.blade.php)
这是我的观点:
{{$row}} Angebote insgesamt
<div class="row">
@foreach ($angebots as $angebot)
<div class="col-12 col-md-6 col-lg-4 pt-4">
<div class="card offer-card">
<div class="card-image">
<img class="img-fluid" src="{{ asset('uploads/avatars/' . $user[$angebot->firma -1]->avatar) }}">
</div>
<div class="card-body">
<h4 class="text-j4y-dark praktikumstitel">{{ $angebot->stellenname }}</h4>
<a href="{{ route('angebot.details',['id'=>$angebot->firma]) }}">Jetzt mehr anzeigen »</a>
</div>
</div>
</div>
@endforeach
</div>
如果我注释掉变量$ angebot一切正常
所以我有变量$ row,它告诉我有多少结果,如果我过滤,它可以告诉我正确的结果数
但是如果foreach不起作用,我现在如何显示我的结果?
答案 0 :(得分:1)
我使用这样的过滤器表单
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="0dp"
android:layout_gravity="center">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter" />
</android.support.v7.widget.CardView>
我在控制器中做什么:
class UserFilterForm extends UserRepository
{
protected $fillable = [
'id',
'name',
'email',
];
public static function rules() :array
{
return [
'id' => 'nullable|integer|exists:users,id',
'name' => 'nullable|string',
'email' => 'nullable|email',
];
}
public function filter()
{
$qb = self::query()->with('roles');
if ($this->id) {
$qb->where('id', $this->id);
}
if ($this->name) {
$qb->where('name', 'like', "%{$this->name}%");
}
if ($this->email) {
$qb->where('email', 'like', "%{$this->email}%");
}
return $qb->paginate(10);
}
}
答案 1 :(得分:0)
您很近。您需要与->get()
等到ifs
之后。之所以如此,是因为一旦执行get()
,查询就会被执行,并且您无法再添加过滤器。
$fwds = DB::table('angebots')
->where('stellentyp', $stellentyp)
->orderBy('stellenname', 'asc'); //The get is not needed yet
if ($this->typ) {
$fwds->where('typ', 'like', "%{$this->typ}%");
}
if ($this->bereich) {
$fwds->where('bereich', 'like', "%{$this->bereich}%");
}
if ($this->abschluss) {
$fwds->where('abschluss', 'like', "%{$this->abschluss}%");
}
$fwds = $fwds->get(); //Place it after the ifs