首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询在Laravel中不起作用

SQL查询在Laravel中不起作用
EN

Stack Overflow用户
提问于 2017-02-16 04:32:43
回答 2查看 399关注 0票数 2

在phpMyAdmin中,这个SQL查询运行得很好。

代码语言:javascript
复制
SELECT products.id FROM products, characteristics 
                WHERE products.id = characteristics.pr_id AND products.c_id = 1
                AND characteristics.value IN ('8-core', 'Quad-Core') 
                AND price BETWEEN 50 AND 5000 GROUP BY products.id

但是当我试图让它在我的模型中工作时,它失败了。

代码语言:javascript
复制
$products = DB::select('SELECT products.id FROM products, characteristics 
        WHERE products.id = characteristics.pr_id AND products.c_id = ?
        AND characteristics.value IN (?) 
        AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $query, $minPrice, $maxPrice]); 
dd($products);

PS:如果在模型中,我将在$query中只使用一个参数(例如“四核”),一切都很好。但是,一旦我尝试使用几个参数,我就得到了空数组。

控制器

代码语言:javascript
复制
$values = Input::get('value');
$category = Input::get('cat');
$brand = Input::get('brand');
$minPrice = Input::get('min_price');
$maxPrice = Input::get('max_price');
$query = implode('", "', $values);

$product = new Product();
$products = $product->getProductsByPar($query, $minPrice, $maxPrice, $category, $brand);

模型

代码语言:javascript
复制
public function getProductsByPar($query, $minPrice, $maxPrice, $cat, $brand)
{
    $category = new Category();
    $brands = new Brand();
    $minPrice = (int)$minPrice;
    $maxPrice = (int)$maxPrice;
    $catId = $category->getCategoryId($cat)->id;

    if($brand == 'none')
    {
    $products = DB::select('SELECT products.id FROM products, characteristics 
            WHERE products.id = characteristics.pr_id AND products.c_id = ?
            AND characteristics.value IN (?) 
            AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $query, $minPrice, $maxPrice]);            
    }
    else
    {
    $brandId = $brands->getBrandId($brand)->id;
    $products = DB::select('SELECT products.id FROM products, characteristics 
            WHERE products.id = characteristics.pr_id AND products.c_id = ?
            AND products.b_id = ? AND characteristics.value IN (?) 
            AND price BETWEEN ? AND ? GROUP BY products.id', [$catId, $brandId, $query, $minPrice, $maxPrice]);             
    }
    dd($products);
    return $products;

我对Model中的查询做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 05:57:04

尝试使用Laravel query builder

代码语言:javascript
复制
// Prepare parameters
$categoryId = 1;
$values = ['8-core', 'Quad-Core'];
$minPrice = 50;
$maxPrice = 5000;

$products = DB::table('products')
    ->select('products.id, characteristics.*')
    ->join('characteristics', 'products.id', '=', 'characteristics.pr_id')
    ->where('products.c_id', $categoryId)
    ->whereIn('characteristics.value', $values)
    ->whereBetween('products.price', [$minPrice, $maxPrice])
    ->groupBy('products.id')
    ->get();
票数 2
EN

Stack Overflow用户

发布于 2017-02-16 04:36:06

问题是,您正在尝试在准备好的语句中使用in,但您不能这样做。

您的问题将被评估为:

代码语言:javascript
复制
characteristics.value IN ("'8-core', 'Quad-Core'")

这并不是真的有意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42259466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档