5

我是 Laravel 的新手。我想使用 laravel 查询生成器进行动态查询。
通常我可以在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 子句不是 null 查询将是

SELECT * FROM $tbl WHERE hello = "world"

如果键和值存在,Laravel orm 适用于 where 子句

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

如果 where 为 null,则以下方法将不起作用

4

2 回答 2

8

您可以将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();
于 2016-12-25T16:12:59.307 回答
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

于 2016-12-25T16:14:33.620 回答