検索結果と等しいレコードを返す検索フィールドを作成しようとしています。私は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();
});
ありがとう!出来た。 –