![](/img/trans.png)
[英]“column” IS NOT NULL in query does not throw error when column does not exist
[英]Undefined column: 7 ERROR: column does not exist
我正在使用PostgreSQL。 当我使用“”引号而不是“”时,会发生此错误。 很简单,我会告诉你。 这个SQL查询给我描述了问题标题中的错误
select "sub"."code", "sub"."customer_id", "sub"."data", "sub"."event_count", "sub"."created_at"
from (select "customer_event_types"."code",
"customer_events"."customer_id",
"customer_events"."data",
count(customer_events.id) event_count,
max(customer_events.created_at) created_at
from "customers"
inner join "customer_events" on "customer_events"."customer_id" = "customers"."id"
inner join "customer_event_types"
on "customer_events"."customer_event_type_id" = "customer_event_types"."id"
group by "customer_event_types"."code", "customer_events"."customer_id", "customer_events"."data"
having count(customer_events.id) = 1) as "sub"
where "sub"."code" = "registration"
您在最后一行看到“注册”了吗? 它给了我错误。
[42703]错误:列“注册”不存在
这是正确代码的示例:
select "sub"."code", "sub"."customer_id", "sub"."data", "sub"."event_count", "sub"."created_at"
from (select "customer_event_types"."code",
"customer_events"."customer_id",
"customer_events"."data",
count(customer_events.id) event_count,
max(customer_events.created_at) created_at
from "customers"
inner join "customer_events" on "customer_events"."customer_id" = "customers"."id"
inner join "customer_event_types"
on "customer_events"."customer_event_type_id" = "customer_event_types"."id"
group by "customer_event_types"."code", "customer_events"."customer_id", "customer_events"."data"
having count(customer_events.id) = 1) as "sub"
where "sub"."code" = 'registration'
这个对我有用。 所以,这个问题。 如何为雄辩的ORM解释我需要“注册”而不是“注册”?
这是我的口才代码:
$set = DB::query()->fromSub(function ($query) {
$query->from('customers')->select('customer_event_types.code',
'customer_events.customer_id',
'customer_events.data',
DB::raw('count(customer_events.id) event_count'),
DB::raw('max(customer_events.created_at) created_at'))
->join('customer_events', 'customer_events.customer_id', '=', 'customers.id')
->join('customer_event_types', 'customer_events.customer_event_type_id', 'customer_event_types.id')
->groupBy('customer_event_types.code', 'customer_events.customer_id', 'customer_events.data')
->having(DB::raw('count(customer_events.id)'), '=', 1);
}, 'sub')
->select('sub.code', 'sub.customer_id', 'sub.data', 'sub.event_count', 'sub.created_at')
->when($firstItem, function ($query, $events) {
// making conditions where dynamic
$whereColumn = [];
foreach ($events as $event) {
$whereColumn[] = ["sub.code", "=", (string)$event->event_code];
if (isset($event->after_than_minutes_ago) && !empty($event->after_than_minutes_ago) && is_numeric($event->after_than_minutes_ago)) {
$whereColumn[] = ["sub.created_at", '>', Carbon::now()->subMinutes($event->after_than_minutes_ago)->toString()];
}
// произошло раньше, чем <число> минут назад
if (isset($event->before_than_minutes_ago) && !empty($event->before_than_minutes_ago) && is_numeric($event->before_than_minutes_ago)) {
$whereColumn[] = ["sub.created_at", '<', Carbon::now()->subMinutes($event->before_than_minutes_ago)->toString()];
}
$query->whereColumn($whereColumn);
$whereColumn = [];
}
return $query;
})
->get();
如您所见,此代码比SQL等效代码更难。 它使where
来自输入数据的条件。 但这似乎并不重要。 我有同样的错误,与引号有关。
SQLSTATE [42703]:未定义的列:7错误:列“ registration”不存在第1行:... r_events.id)= $ 1)as“ sub”其中(“ sub”。“ code” =“ registrat ... ^(SQL:从中选择“ sub”。“ code”,“ sub”。“ customer_id”,“ sub”。“ data”,“ sub”。“ event_count”,“ sub”。“ created_at”从(选择“ customer_event_types” 。“代码”,“ customer_events”。“ customer_id”,“ customer_events”。“数据”,count(customer_events.id)event_count,max(customer_events.created_at)created_at来自“ customers”内部联接“ customer_events”上的“ customer_events”。 “ customer_id” =“客户”。“ id”内部联接“ customer_events”上的“ customer_event_types”。“ customer_event_type_id” =“ customer_event_types”。“ id”按“ customer_event_types”分组。“ code”,“ customer_events”。“ customer_id”, count(customer_events.id)= 1)的“ customer_events”。“ data”作为“ sub”,其中(“ sub”。“ code” =“ registration”和“ sub”。” created_at”>“周五8月30日10: 03:14 GMT + 0000“和” sub“。” created_at“ <” 2019年8月30日星期五10:38:14 GMT + 0000“))
从文档 :
whereColumn
方法可用于验证两列相等:
您可能应该使用whereIn
或where
验证一列的值等于某物,而不是whereColumn
验证两列是否相等。 (然后,应使用单引号正确生成查询)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.