laravel条件组装?

tp框架可以把查询条件在查询的外面组装起来,比如

$str = 'liling';
$map = [
  'status' => 1,
  'age' => ['>', 18],
  'type' => ['in', [1,2,3]]
  'name' => ['like', '%' . $str . '%']
];
model("User")->where($map)->select();

想知道laravel 这种 ">" , "in", "like"在外部怎么组装?

阅读 2.3k
2 个回答

laravel 更面向对象一些

$model = User::query();
$model->where("status",1);//默认是=
$model->where("status",">",18);
$model->whereIn("type",[1,2,3]);
$model->where("name","like","%{$str}%");
$result = $model->get();//分页用->paginate();
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

拼接方式有些不太一样, Laravel 是这样来的,多维数组,每个数组的参数顺序和直接使用 where 一样。

$where = [
    ['name', '=', 'user'],
];

Model::where($where)->first();

具体的实现在 Builder::addArrayOfWheres

当传入的多维数组,键名是数字时,并且值是数组时,就平整的传入到 where 方法,否则就按照 where(..., =, ...) 的方式。

protected function addArrayOfWheres($column, $boolean, $method = 'where')
{
    return $this->whereNested(function ($query) use ($column, $method, $boolean) {
        foreach ($column as $key => $value) {
            if (is_numeric($key) && is_array($value)) {
                $query->{$method}(...array_values($value));
            } else {
                $query->$method($key, '=', $value, $boolean);
            }
        }
    }, $boolean);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题