テーブル結合を用いた検索機能でエラーが出ました。
解決したいこと
products.company_idとcompanies.idを結合させて、二つの値を&検索し検索機能を追加したいのですが
"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'companies.campany_name' in 'field list'"というエラーが出てしまいました。
laravelで登録した商品を部分検索し、検索したものだけを表示させるというものを作っております。
発生している問題・エラー
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'companies.campany_name' in 'field list'
web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('auth/login');
});
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/product', [App\Http\Controllers\ProductController::class, 'showList'])->name('product');
//検索機能のルート
Route::get('/product', [App\Http\Controllers\ProductController::class, 'search'])->name('search');
Route::post('/delete{id}', [App\Http\Controllers\ProductController::class, 'delete'])->name('product.destroy');
Route::get('/product_form', [App\Http\Controllers\productController::class, 'create'])->name('product_form');
Route::post('/product_form', [App\Http\Controllers\productController::class, 'exeCreate'])->name('submit');
Route::get('/detail{id}', [App\Http\Controllers\productController::class, 'detail'])->name('product.detail');
Route::get('/edit/{id}', [App\Http\Controllers\productController::class, 'edit'])->name('product.edit');
Route::post('/update/{id}', [App\Http\Controllers\productController::class, 'update'])->name('product.update');
product.blade.phpの検索フォーム
<div class="search">
<form action="{{ route('search') }}" method="GET">
@csrf
<!-- 検索フォーム -->
<div class="product_name.search">
<label for="product_name">{{ __('商品名') }}</label>
<input type="text" name="keyword" id="keyword">
</div>
<div class="company_name.serch">
<label for="company_id">{{ __('メーカー') }}<span class="badge badge-danger ml-2">{{ __('必須') }}</span></label>
@foreach ($companies as $company)
<select class="form-control" name="company_id" id="company_id" value="{{ old('company_id')}}">
<option name="keyword" id="keyword">{{ $company->company_name }}</option>
</select>
@endforeach
</div>
<input type="submit" value="検索">
</form>
</div>
Productcontroller.php
public function search(Request $request){
// 検索機能
$keyword = $request->input('keyword');
$product = new Product();
$company = new Company();
$products = $product->SearchList($keyword);
$companies = $company->SearchList($keyword);
return view('product', compact('products','companies'));
}
Product.php
public function SearchList($keyword){
// 検索処理
$products=DB::table('products')
->join('companies','company_id','=','companies.id')
->select('products.*','companies.campany_name')
->where('products.product_name', 'LIKE', "%$keyword%")
->orwhere('companies.company_name', 'LIKE', "%$keyword%")
->get();
return $products;
}
自分で試したこと
調べてみると、productsにcompanies.campany_nameがないというエラーだったため、productsのcompany_idにcompanies.campany_nameを結合したのですがエラーが取れませんでした。
結合したのでcompanies.campany_nameがproductsの一部ということにはならないのでしょうか。
ご教授いただけると幸いです。
よろしくお願いいたします。