2017-03-07 4 views
0

検索結果と等しいレコードを返す検索フィールドを作成しようとしています。私は2つのモデル、ブランドと車を持っています。私の関係は、ブランド(オペル、スズキなど)は多くの車を持ち、車はブランドに属しています。Laravel 5関係が曖昧な検索が機能しません

ブランドモデル

class Brand extends Model 
{ 
    protected $fillable = [ 
    'brandname' 
    ]; 
    public function cars(){ 
     return $this->hasMany(Car::class); 
    } 

} 

車モデル

class Car extends Model 
{ 
    public function brand(){ 
     return $this->belongsTo(Brand::class); 
    } 
    protected $fillable = [ 
     'user_id', 'brand_id', 'year', 'licensplate' 
    ]; 
} 

私はいくつかの情報を持つすべての車を示してページを持っています。 Find Cars form

これは、ページのデコードです:

<div class="col-sm-8 blog-main"> 
    <h1>Alle auto's</h1><hr> 
    <form method="POST" action="/allcars"> 
     {{csrf_field()}} 
     <div class="form-group"> 
      <input type="text" name="searchfield" placeholder="Merk"> 
      <button type="submit">Zoek</button> 
     </div> 
    </form> 
    @foreach($brands as $brand) 
      @foreach($brand->cars as $car) 
       <div class="form-group"> 
        <h5> 
         {{$brand->brandname}} 
        </h5> 
        Kenteken: {{$car->licensplate}}<br> 
        Bouwjaar: {{$car->year}}<br> 
       </div> 
      @endforeach 
    @endforeach 
</div> 

これは私のルートファイルです:
ルート

Route::post('/allcars', '[email protected]'); 

最後に私のコントローラファイル: CarController.php

public function show(){ 
    $input = request('searchfield'); 
    if(empty($input)) 
    { 
     return back(); 
    } 

    else if(is_numeric($input)) 
    { 
     // Search on year 
     $brands = Brand::with('cars')->whereHas('cars', function($q) 
     { 
      $input = request('searchfield'); 
      $q->where('year', $input); 
     })->get(); 
     return view('content.cars.index', compact('brands')); 
    } 
    else 
    { 
     // Search on brandname 
     $brands = Brand::with('cars')->get()->where('brandname', $input); 
     return view('content.cars.index', compact('brands')); 
    } 
} 

else ifステートメントは完全に動作しています。整数(年)が入力されている場合は年の検索が使用され、文字列が入力されるとブランド検索が使用されます。

ただし、ブランド検索は完全に機能しています。私が「Opel」を検索すると、Opelというブランドの情報が入った車がすべて手に入ります。しかし、私が1990年に検索すると、1990年の車を持っているブランドが得られ、そのブランドから他の車も入手します。

例:オペル(1990)、オペル(2000)とオペル(1882):

私は1990を検索した場合、私は3台を得ます。

他の例:2000年を検索して、Opel(2000)、Opel(1990)、Opel(1882)、BMW(2000)、BMW(1721)の5台を取得します。

私は私のコードで何か間違っていると思う、私を修正してください。 これらはところで、私の移行です: カー移行

Schema::create('cars', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->unsignedInteger('user_id'); 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
     $table->unsignedInteger('brand_id'); 
     $table->foreign('brand_id')->references('id')->on('brands')->onDelete('cascade'); 
     $table->string('year'); 
     $table->string('licensplate'); 
     $table->timestamps(); 
    }); 

ブランド移行

Schema::create('brands', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('brandname'); 
     $table->timestamps(); 
    }); 

答えて

0

が一部あればこれに他を変更してみてください:

else if(is_numeric($input)) 
    { 
     // Search on year 
     $brands = Brand::with(['cars' => function ($q) use ($input) { 
      $q->where('year',$input); 
     }])->get(); 

     return view('content.cars.index', compact('brands')); 
    } 
+0

ありがとう!出来た。 –

関連する問題