Laravel使用查询构建器实现动态where查询

6

我是Laravel的新手。我想使用Laravel查询构建器创建动态Where查询。
通常情况下,我可以在PHP中创建动态查询。

$where = array(
  'hello' => 'world'
);

function get($where = null){
   if($where == "")  $where = "";
  //Function which converts where clause into queries
  wheretoqueries($where);  //converts where clause
  $sql = "SELECT * FROM $tbl $where";
  return $sql; 
}
echo get($where);
如果where子句为空,则查询结果将为空。
SELECT * FROM $tbl

如果where子句不为空,查询将会被执行。

SELECT * FROM $tbl WHERE hello = "world"

Laravel ORM在键和值都存在的情况下可以很好地处理where子句。

A::where($where)->get();

如果where为null,则以下方法将无法工作

2个回答

9
您可以将“where”查询链接起来,如下所示:

where 查询可以进行链式操作:

$query = Model::query();

if (!empty($value)) {
   $query->where('column', $value);
}

$query->get();

或者

你可以使用when方法,例如:

Model::when($value, function ($query) use ($value) {
        return $query->where('column', $value);
    })
    ->get();

1
通过使用这种方法,您可以在查询上添加链接。 - Amit Gupta

0

试试这个。如果 $where 变量包含某些内容,则查询将执行,否则它将从 A 模型中检索所有数据。

 function get($where = null){
     if($where != null){
        A::where('field_name', '=', $where)->first(); 
     }else{
        A::all();
     }
  }

注意:如果您的查询返回多个值,则必须在查询构建器的末尾使用get()方法,而不是first()方法; 参考:https://laravel.com/docs/5.3/queries#where-clauses


很高兴得知我的回答对你有帮助。 - Md. Abutaleb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,