将where子句保存在变量中,并在laravel查询中使用

时间:2019-01-17 09:24:23

标签: laravel eloquent

我已经将所有where子句保存在一个变量中,并且我试图在laravel查询中加入该变量,但无法正常工作。这是我的代码

$where .= "";
$where .= '->where("product_details.title", '.$request->title.')'; 
$where .= '->where("product_details.id", '.$request->id.')'; 
$results = DB::table('product_details').'$where'.->get();

如何在查询中使用变量?

3 个答案:

答案 0 :(得分:2)

通过使用 if条件语句进行动态查询

$results = DB::table('product_details')

if($request->title) {
   $results->where("product_details.title", $request->title);
}
if($request->id) {
   $results->where("product_details.id", $request->id);
}
$result->get();

答案 1 :(得分:1)

我不确定您为什么要这样做。以下应该可以正常工作。

DB::table('product_details')
    ->where([
        'product_details.title' => $request->title
        'product_details.id' => $request->id
    ])
    ->get(); 

现在,假设您可能并不总是从请求中获得标题或ID,也可以这样做

DB::table('product_details')
    ->when($request->title, function ($query, $title) {
        return $query->where('product_details.title', $title);
    })
    ->when($request->id, function ($query, $id) {
        return $query->where('product_details.id', $id);
    })
    ->get();

答案 2 :(得分:0)

这将不起作用,因为您正在以字符串形式保存文本,并且输出将以字符串形式存在,因此您需要将其转换为eval

$results = DB::table('product_details')  . eval ($where) .->get();