gpt4 book ai didi

mysql - 由于 orwhere 导致查询忽略条件 - Laravel5

转载 作者:行者123 更新时间:2023-11-29 07:11:35 28 4
gpt4 key购买 nike

我有一个产品搜索功能,可以按名称、描述和关键字进行搜索...

有 3 列包含这些项目,如下所示:名称、描述和关键字

我的问题是这样的,当我搜索产品查询时,会返回一个包含多个产品的列表,但其中一些产品不应列出,因为不满足所有要求....遵循查询:

我的行动:

public function search( $data )
{
$products = $this->queryProductsAvailable()
->where('produtos.nome', 'like', '%'.$data.'%')
->orWhere('produtos.descricao', 'like', '%'.$data.'%')
->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%')
->limit( $this->_limitProducts )
->orderBy( 'fornecedores.plano_id', 'DESC' )
->get();

$this->savePrint( $products );

// $categories = $this->setCategories();

return view('Catalogo.search', [
'products' => $products,
'searchTerm' => $data
]
);
}


private function queryProductsAvailable()
{
return Products::join('fornecedores', 'fornecedores.id', '=' ,'produtos.fornecedor_id')
->where( 'fornecedores.ativo', 1)
->where( 'produtos.moderacao', "P" )
->where( 'produtos.ativo' , true )
->where( 'produtos.preco_min', '>', 0 )
->select( 'produtos.*');
// ->limit( $this->_limitProducts );
}

执行查询时返回的产品不符合“productsAvailable”标准,应为 fornecedor.ativo = 1 且 produtos.ativo = 1 (true)

尽管在查询中是隐式的,但由于 orWhere 子句,它会被忽略。

我的疑问是如何不使用这个 orWhere 并使我的查询搜索产品名称、描述以及关键词?

简而言之,如何通过列名称、描述和关键字获取产品,而不忽略 productsAvailable 函数的条款?

最佳答案

而不是:

$products = $this->queryProductsAvailable()
->where('produtos.nome', 'like', '%'.$data.'%')
->orWhere('produtos.descricao', 'like', '%'.$data.'%')
->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%')
->limit( $this->_limitProducts )
->orderBy( 'fornecedores.plano_id', 'DESC' )
->get();

你应该使用:

$products = $this->queryProductsAvailable()
->where(function($q) use ($data) {
$q->where('produtos.nome', 'like', '%'.$data.'%')
->orWhere('produtos.descricao', 'like', '%'.$data.'%')
->orWhere('produtos.palavras_chave', 'like', '%'.$data.'%')
})->limit( $this->_limitProducts )
->orderBy( 'fornecedores.plano_id', 'DESC' )
->get();

如您所见,条件被包装到额外的位置,以便在查询中添加括号

关于mysql - 由于 orwhere 导致查询忽略条件 - Laravel5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39514766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com