【问题标题】:Laravel Querying ViewsLaravel 查询视图
【发布时间】:2017-07-25 04:31:34
【问题描述】:

我有这样的看法:

CREATE VIEW orders_sales AS 
SELECT code, SUM(quantity) * SUM(sale_price) as product_total, shop_id
FROM `orders`
GROUP BY code, product_id

我正在尝试这样查询:

$data = DB::table('orders_sales')->get();

我收到以下错误:

SQLSTATE[42000]:语法错误或访问冲突:1055 'pakishops2.orders.shop_id' 不在 GROUP BY 中(SQL: select * from orders_sales)

我可以在 phpmyadmin 中像 select * from orders_sales 一样查询它,但它不会用 Laravel 查询。

enter image description here

编辑:

我已将视图名称更改为 view_saleorders,但还是不行

【问题讨论】:

  • 订单有shop_id字段吗?
  • 为什么视图和表格的名称相同?能不能改一下看看
  • 我试过了,改名为view_saleorders,没用
  • 尝试写 DB::query("select * from view_saleorders")->get();请为表格和视图保留不同的名称
  • 也不行

标签: php mysql laravel


【解决方案1】:

很抱歉恢复旧帖子,但您的观点是错误的。您需要将您的列与您的 GROUP BY 子句相匹配。

shop_id 更改为product_id,或将product_id 更改为shop_id

-- This is wrong. 
CREATE VIEW orders_sales AS 
SELECT code, SUM(quantity) * SUM(sale_price) as product_total, <!shop_id!>
FROM `orders`
GROUP BY code, <!product_id!>

【讨论】:

    【解决方案2】:

    立即尝试替代方案,

    使用该名称作为 laravel 标准创建模型,

    喜欢

    class ViewOrders extends Eloquent
    

    在模型内部添加所需的命名空间(如果有)。

    然后创建类变量为

    protected $table = 'your-view-name';
    

    现在通过如下方式检查数据,

    ViewOrders::all();
    

    并检查您是否正在获取数据。

    config/database.php 中添加strict =&gt; false

    如果设置为 true,那么它会在查询时添加 ONLY_FULL_GROUP_BY。

    更具体的模式,

    'modes' => [
        'NO_ZERO_DATE',
         'ONLY_FULL_GROUP_BY',
    ],
    

    【讨论】:

    • 不错的技巧,但没有奏效。相同的错误:SQLSTATE[42000]: 语法错误或访问冲突:1055 'pakishops2.orders.shop_id' 不在 GROUP BY 中(SQL: select * from view_saleorders
    • 你是否在 config/database.php 中设置了 'strict' => false。现在重新检查我的答案
    【解决方案3】:

    转到config/database.php 文件并检查选项strict 是否设置为true。

    将其设置为 false,您的查询将起作用。

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多