Я пытаюсь запросить две таблицы в своей базе данных laravel

#php #mysql #laravel

Вопрос:

Я пытаюсь запросить две таблицы в базе данных, но она возвращает эту ошибку. Я пытаюсь реализовать поиск по нескольким таблицам. Проект представляет собой интернет-магазин с 3 отличительными таблицами, Товарами, Категориями и Брендами. Я могу выполнять поиск только в таблице продуктов, но, похоже, не могу получить одно и то же поле поиска из файла блейда для поиска категорий или брендов и возврата результатов связанных продуктов.

 QLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous (SQL: select * from `categories` inner join `products` on `products`.`category_id` = `categories`.`id` where `name` LIKE %Television% and `status` = 1)
 

Моя функция поиска

 public function searchProducts(Request $request) {
        $product = $request->input('product');

        $categories = Category::with('categories')->where(['parent_id' => 0])->get();

        $productsAll = Category::query()->join('products', 'products.category_id', '=', 'categories.id')
                                    ->where('name', 'LIKE', "%{$product}%")
                                    ->where('status', 1)->get();


        $breadcrumb = "<a href='/'>Home</a> / ".$product;

        return view('pages.results')->with(compact('categories','productsAll','product','breadcrumb'));

    }
 

Модель Моей категории

 class Category extends Model implements Searchable
{
    protected $table = 'categories';
    protected $fillable = [
        'name'
    ];
    public function categories(){
        return $this->hasMany('AppCategory','id');
    }

    public function products(){
        return $this->hasMany('AppProduct','id');
    }
}
 

Моя модель Продуктов

 class Product extends Model implements Searchable
{

    public function category() {
        return $this->hasMany('AppCategory', 'id') ;
    }

    public function attributes(){
        return $this->hasMany('AppProduct','id');
    }
}
 

Ответ №1:

У вас есть столбец состояния в нескольких таблицах. Измените это

 ->where('status', 1)->get();
 

к этому

 ->where('products.status', 1)->get();
 

Ответ №2:

Я смог решить эту проблему, изменив свою функцию поиска следующим образом.

 public function searchProducts(Request $request) {
        $product = $request->input('product');

        $categories = Category::with('categories')->where(['parent_id' => 0])->get();

        $productsAll = Category::query()->join('products', 'products.category_id', '=', 'categories.id')
                                    ->where('categories.name', 'LIKE', "%{$product}%")
                                    ->orWhere('products.product_name', 'LIKE', "%{$product}%")
                                    ->where('products.status', 1)->get();


        $breadcrumb = "<a href='/'>Home</a> / ".$product;

        return view('pages.results')->with(compact('categories','productsAll','product','breadcrumb'));

    }