我有一个包含两列的表格,其中包含一些文本数据。 我想做的是搜索这些列,但仅搜索给定的ID。 到目前为止,无论提供的ID如何,我都能获得整个数据库的结果。这是因为orwhere条件设置错误。 我不知道如何正确设置
$qu = \App\AppModels\Quotation::with([
'products.product',
'paymentTerms',
'deliveryTerms',
'company',
'status',
'createdByUser'
]);
if($search_q){
$qu->where( 'name', '=', $search_q )
->orWhere( 'reference', '=', $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'name', 'LIKE', $search_q . '%' )
->orWhere( 'reference', 'LIKE', '%' . $search_q )
->orWhere( 'reference', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'reference', 'LIKE', $search_q . '%' );
}
$quotations = $qu->where('created_at', '>=', $records_from)
->whereIn('id',array_unique($quotation_ids))
->orderBy('created_at','DESC')
->get();
答案 0 :(得分:2)
您可以使用“参数分组”对orWhere
查询进行分组。因此,您可以这样做:
if($search_q){
$qu = $qu->where(function ($query) {
$query->where( 'name', '=', $search_q )
->orWhere( 'reference', '=', $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'name', 'LIKE', $search_q . '%' )
->orWhere( 'reference', 'LIKE', '%' . $search_q )
->orWhere( 'reference', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'reference', 'LIKE', $search_q . '%' );
});
}
答案 1 :(得分:0)
经过更多研究,我找到了答案。
$qu = \App\AppModels\Quotation::with([
'products.product',
'paymentTerms',
'deliveryTerms',
'company',
'status',
'createdByUser'
])
->whereIn('id',array_unique($quotation_ids));
if($search_q){
$qu->where(function ($query) use($search_q) {
$query->orWhere( 'name', '=', $search_q )
->orWhere( 'reference', '=', $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q )
->orWhere( 'name', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'name', 'LIKE', $search_q . '%' )
->orWhere( 'reference', 'LIKE', '%' . $search_q )
->orWhere( 'reference', 'LIKE', '%' . $search_q . '%' )
->orWhere( 'reference', 'LIKE', $search_q . '%' );
});
}
$quotations = $qu->where('created_at', '>=', $records_from)
->orderBy('created_at','DESC')
->get();