当前位置: 首页 > 知识库问答 >
问题:

Laravel集合多个条件

裴欣然
2023-03-14

在这篇文章之后,如何使用Laravel Eloquent创建多个where子句查询?

我正在尝试插入多个“和”条件:

$matchThese = ['destination.country' => 'china', 'doc.description' => 'business'];

    return $collection->where($matchThese);

但我收到这个错误:

Too few arguments to function Illuminate\Support\Collection::where(), 1 passed . . . but two expected

共有3个答案

符风畔
2023-03-14

因为其中期望或需要一个以上的参数,所以它不起作用。

这就是你的错误所说的:

参数太少,无法执行函数,其中()传递了1。但预计会有两个

您可能可以这样做:

return $collection->where($matchThese[0], $matchThese[1]);

或者这个

return $collection->where($matchThese[0], OPERATOR, $matchThese[1]); // OPERATOR could be `=` or `<>`

所以要有多个条件,我们可以这样做:

return $collection->where($matchThese[0], $matchThese[1])
                  ->where($foo, $bar);

你基本上可以把它们链起来。

秦才良
2023-03-14

将多个链接到其中s肯定会起作用,但您将为它们中的每一个执行循环。使用过滤器代替。这将循环检查并只检查一次您的所有条件。

$matchThese = ['destination.country' => 'china', 'doc.description' => 'business'];

return $collection->filter(function ($item) use ($matchThese) {
    foreach ($matchThese as $key => $value) {
        if ($item[$key] !== $value) {
            return false;
        }
    }
    return true;
});
阎晔
2023-03-14

集合,其中方法不接受像eloquent那样的条件数组。但你可以链多个条件。

return $collection->where('destination.country', 'china')
    ->where('doc.description', 'business');

实例

$data = [
    ['name' => 'john', 'email' => 'john@gmail.com'],
    ['name' => 'john', 'email' => 'jim@gmail.com'],
    ['name' => 'kary', 'email' => 'kary@gmail.com'],
];

$collection = collect($data);

$result = $collection->where('name', 'john');
// [{"name":"john","email":"john@gmail.com"},{"name":"john","email":"jim@gmail.com"}]


$result = $collection->where('name', 'john')->where('email', 'john@gmail.com');
// [{"name":"john","email":"john@gmail.com"}]
 类似资料:
  • 我正在尝试使用多个条件连接两个表。由于第二个联接条件,以下查询不起作用。

  • 我收集了用户在商店购买的物品,以及他从朋友那里得到的喜欢和不喜欢的东西。集合字段如下所示: 现在,我想得到以下总结: 获取用户X的(喜欢-不喜欢)差异 获取用户X的差异(喜欢-不喜欢)到存储Y 获取用户X的(喜欢-不喜欢)差异到商店Y和产品Z 对于#1,我做了: 我得到了正确的结果: [{"_id":"542ea90fbb1e37b09f660980","rankDiff": 2}] 但当我试图通

  • 问题内容: 我喜欢这样的查询: 在ORMlite中,可以使用以下代码: 如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。 基本上,这种方法是不够的。它需要其他支持的方法的条件。 感谢您的任何建议。 问题答案: 如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。 在ORMLite 中有一点语法上的缺陷。您打电话的时候: 该方法得到的是: 您确实可以将其重写为:

  • 给定以下代码,在main()中创建了多少对象,在执行第15行之后,有多少对象符合垃圾回收机制? 3个已创建,0个符合条件 4个已创建,1个符合条件 5个创建,2个符合条件 3个已创建,2个符合条件 以上都不是 好的,首先,请不要把它标记为家庭作业。这是我大学的一个测试题。根据我的说法,应该有两个创建的对象,第15行之后有一个符合垃圾收集的条件。这是因为只有两个新的操作符用于创建对象,而“d”在开始

  • 通过组合曲线CurvePath可以把多个圆弧线、样条曲线、直线等多个曲线合并成一个曲线。 U型案例 var geometry = new THREE.Geometry(); //声明一个几何体对象Geometry // 绘制一个U型轮廓 var R = 80;//圆弧半径 var arc = new THREE.ArcCurve(0, 0, R, 0, Math.PI, true); // 半圆弧

  • 我有一个关于多个on值的内部联接的问题。我确实在Laravel中构建了这样的代码。 唯一的问题是,它给出了这样的结果: 如您所见,联接中的多个条件很好,但它认为 是列而不是字符串。这有可能吗,还是我必须把它修好。 提前谢谢!