【问题标题】:How to make query from related models in Laravel?如何从 Laravel 中的相关模型中进行查询?
【发布时间】:2016-08-15 13:46:34
【问题描述】:

我碰巧有:销售模式有:id, product_id, qty, s_price;产品型号:id, category_id, name;具有的类别模型:id, name

目前我可以成功进行此查询:

 $sales = Sale::orderBy('created_at', 'DESC')
                ->whereBetween('created_at', [$startDate, $endDate])
                ->whereBetween('qty', [$lQty, $uQty])
                ->paginate(11);

我知道 category_id 并且想只过滤掉属于特定类别的产品的销售。比如:

 $sales = Sale::orderBy('created_at', 'DESC')
                    ->whereBetween('created_at', [$startDate, $endDate])
                    ->whereBetween('qty', [$lQty, $uQty])
                    ->where('category_id', '=', 5)
                    ->paginate(11);

【问题讨论】:

  • 那么...问题是什么?您是否遇到某种错误?你得到什么结果/你期望什么结果?
  • 我收到此错误 Column not found: 1054 Unknown column 'category_id' in 'where clause' (SQL: select count(*) as aggregate from sales where created_at between 2016-08- 15 和 2016-08-16 和 qty 介于 0 和 100000 之间和 category_id = 5)
  • 我明确定义了产品和销售之间的关系
  • 所以您的sales 表没有category_id 列。没有什么令人困惑的。您必须通过 left joining 任何所需的表从现有表构造查询,直到您可以查询 category_id 列。
  • 如果您尝试查询特定列,您仍然需要进行连接。如果您想根据 ID 从关系中返回记录的子集,可以使用 ->with(["relationship", => function($query){ $query->where("id", "=", 5); }]);

标签: php laravel


【解决方案1】:

你可以试试这个

$sales = Sale::whereHas('product', function ($query) {
                $query->where('category_id', '=', 5);
            })
            ->whereBetween('created_at', [$startDate, $endDate])
            ->whereBetween('qty', [$lQty, $uQty])
            ->orderBy('created_at', 'DESC')
            ->paginate(11);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2015-08-10
    • 2016-12-01
    • 2016-05-04
    • 2017-09-30
    • 2018-09-16
    • 2021-01-13
    相关资源
    最近更新 更多