Использование Где в QueryBuilder - Laravel - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть таблица Products (id, category_id, name);

Я хочу получить результат, подобный этому запросу:

SELECT * FROM Products WHERE category_id=$category_id OR $category_id=0;

Когда я присваиваю $ category_id со значением 0 => приведенный выше запрос вернет все записи.

Как мне написать этот запрос в Laravel?

Я пробовал это:

Products::where(function($query) use ($category_id){
         $query->where("category_id",$category_id)
        ->orWhere($category_id,0)
})->get();

Но, ошибка:

Это выглядит так:

SELECT
    *
FROM
    `products` 
WHERE
    ( `product_category_id` = 0 OR `0` = 0 )

И ошибка печати: Column not found: 1054 Unknown column '0' in 'where clause'

Как исправить: '0' = 0 до 0 = 0?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018
$product = new Products;
if ($category_id != 0) {
    $product = $product->where("category_id", $category_id);
}
$products = $product->get();
0 голосов
/ 05 декабря 2018

используйте это

Products::where(function($query) use ($category_id){
         $query->where("category_id",$category_id)
        ->orWhere("category_id",0);
})->get();
0 голосов
/ 05 декабря 2018

что не так с вашим кодом это:

->orWhere($category_id,0)

вы сделали часть столбца как переменную.

попробуйте этот код:

Products::where(function($query) use ($category_id){
         return $query->where("category_id", $category_id)
        ->orWhere("category_id", 0);
})->get();
0 голосов
/ 05 декабря 2018

Используйте when () :

$products = Product::when($categoryId, function ($query, $categoryId) {
    $query->whereCategoryId($categoryId);
})->get();

Этот метод вызовет функцию, только если условие верное.Вы можете добиться того же с помощью простого оператора if:

$products = Product::query();

if ($categoryId) {
    $products->whereCategoryId($categoryId);
}

$products = $products->get();

То, что вы получаете с помощью when(), заключается в том, что вы не разрываете цепочку, поэтому вы можете использовать условные изменения запроса в одном выражении,Это полезно, например, если вы хотите просто return.

...