我有一个像这样工作的 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;
}
但是当我运行这个时,我收到错误:
Column not found: 1054 Unknown column 'ci.created_at' in 'field list' (SQL: select
dmspro_mys_cart
.cart_id
,dmspro_mys_cart
.mystore_user_id
, MIN(ci.created_at) AS created_at fromdmspro_mys_cart
inner joindmspro_mys_cart_item
asdmspro_mys_ci
ondmspro_mys_ci
.cart_id
=dmspro_mys_cart
.cart_id
wheredmspro_mys_cart
.is_noticed
= 0 anddmspro_mys_ci
.created_at
< 2019-10-09 15:51:37 group bydmspro_mys_cart
.cart_id
)
我该如何解决这个问题?
谢谢!
更新:dmspro_mys_ 是我的前缀
最佳答案
您的错误消息与您的查询不符。
错误消息中提到了名为“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')
关于mysql - 在 Laravel 中使用 raw 时字段列表中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58302594/