【问题标题】:Unknown column in field list when use raw in Laravel在 Laravel 中使用 raw 时字段列表中的未知列
【发布时间】:2020-02-06 16:47:17
【问题描述】:

我有一个这样的 mysql 查询:

SELECT mc.cart_id, mc.mystore_user_id, MIN(ci.created_at) AS created_at
FROM dmspro_mys_cart AS mc
INNER JOIN dmspro_mys_cart_item AS ci
ON ci.cart_id = mc.cart_id
WHERE mc.is_noticed = 0 AND ci.created_at < '2019-10-08 07:08:39'
GROUP BY mc.cart_id 

我在我的 Laravel 项目中将其转换为查询生成器:

public function getMinCreatedAt($cartTime)
    {
        $oSelect = $this->select("{$this->table}.cart_id", "{$this->table}.mystore_user_id",\DB::raw('MIN(ci.created_at) AS created_at'))
                        ->join('cart_item AS ci', 'ci.cart_id', '=', "{$this->table}.cart_id")
                        ->where("{$this->table}.is_noticed", '=', 0)
                        ->where('ci.created_at', '<', $cartTime)
                        ->groupBy("{$this->table}.cart_id")
                        ->get();

        return $oSelect;
    }

但是当我运行这个时,我得到了错误:

未找到列:1054 “字段列表”中的未知列“ci.created_at” (SQL:选择dmspro_mys_cart.cart_iddmspro_mys_cart.mystore_user_id, MIN(ci.created_at) AS created_at 从dmspro_mys_cart 内连接dmspro_mys_cart_item as dmspro_mys_ci dmspro_mys_ci.cart_id = dmspro_mys_cart.cart_id 其中dmspro_mys_cart.is_noticed = 0 和dmspro_mys_ci.created_at dmspro_mys_cart.cart_id)

我该如何解决这个问题?

谢谢!

更新:dmspro_mys_ 是我的前缀

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    您的错误消息与您的查询不一致。

    在错误消息中提到了一个名为“dmspro_mys_ci”的别名,但它在您的查询中不存在。

    你能再检查一下吗?

    基本上你是在调试错误的查询。

    更新

    由于 laravel 是使用前缀数据库表设置的,别名“ci”也是前缀。 在 DB::raw() 中引用此别名时,表/别名不会自动添加前缀,因此您必须自己更改:

    \DB::raw('MIN(ci.created_at) AS created_at')

    到:

    \DB::raw('MIN(dmspro_mys_ci.created_at) AS created_at')

    【讨论】:

    • 那么您需要将\DB::raw('MIN(ci.created_at) AS created_at') 更改为\DB::raw('MIN(dmspro_mys_ci.created_at) AS created_at') 以匹配您也带有前缀的别名。
    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 2015-08-12
    • 2013-04-09
    • 2015-05-18
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多