如何使用 Laravel 6 中的 OR 和 AND 条件从请求创建 Eloquent 查询?

How to create Eloquent query from request with OR and AND conditions in Laravel 6?

我将这个 JSON 对象发送到 API 端点:

[
    {
        "name": "John",
        "city": "Berlin",
    },
    {
        "name": "Jack",
        "country": "USA",
    }
]

我想创建这个 SQL 查询:

SELECT * FROM users WHERE
  (`name` = "John" AND `city` = "Berlin")
  OR
  (`name` = "Jack" AND `country` = "USA");

我有一个 User 模型来处理用户。

使用 Laravel Eloquent 查询生成器创建此 SQL 查询的最简单方法是什么?

return User::orWhere(function (Builder $query) {
        return $query->where('name', 'John')->where('city', 'Berlin');
    })->orWhere(function (Builder $query) {
        return $query->where('name', 'Jack')->where('country', 'USA');
    })->get();

(edit) 如果你想发送参数;

$city = 'Berlin';
$country = 'USA';

return User::orWhere(function (Builder $query) use ($city) {
        return $query->where('name', 'John')->where('city', $city);
    })->orWhere(function (Builder $query) use ($country) {
        return $query->where('name', 'Jack')->where('country', $country);
    })->get();

如果要动态生成;

public function index()
{
    $parameters = [
        [
            'name' => 'John',
            'city' => 'Berlin',
        ],
        [
            'name' => 'Jack',
            'country' => 'USA',
        ]
    ];

    $query = User::query();

    foreach ($parameters as $item) {
        $query->orWhere(function (Builder $query) use ($item) {
            foreach ($item as $key => $value) {
                $query->where($key, $value);
            }
        });
    }

    return $query->get();
}