Laravel / Postgres数据库查询?

时间:2016-02-29 13:27:04

标签: php postgresql laravel

我对Laravel / Postgres数据库查询的查询存在(奇怪)问题。我会在这里粘贴整个查询(它有点太长了,但我们只关注它的一部分):

select distinct "products".*, "brands"."name" as "brand", "brands"."image" as "brand_image", "product_categories"."name" as "category", "product_categories"."slug" as "category_slug", count(distinct product_features.feature_category_id) as features_count from "products" inner join "brands" on "products"."brand_id" = "brands"."id" inner join "product_categories" on "products"."category_id" = "product_categories"."id" left join "product_features" on "products"."id" = "product_features"."product_id" where "products"."deleted_at" is null and "products"."category_id" in (142) and "products"."published" = true and "brands"."published" = true and "product_categories"."published" = true and "product_categories"."deleted_at" is null and "price" >= 0 and "price" <= 19000 and "products"."brand_id" in (17) and 
            (product_features.feature_category_id = 555 and
            CAST(product_features.value AS BOOLEAN) = true and
            product_features.deleted_at IS NULL) or
            (product_features.feature_category_id = 554 and
            CAST(product_features.value AS BOOLEAN) = true and
            product_features.deleted_at IS NULL) group by "products"."id", "brands"."name", "brands"."image", "product_categories"."name", "product_categories"."slug" having count(distinct product_features.feature_category_id) = 2 order by price asc

这是初始查询,但是当我执行它时,我得到了奇怪的错误:

ERROR:  invalid input syntax for type boolean: "800"

我不知道为什么会抛出这个错误?

1 个答案:

答案 0 :(得分:1)

您的product_features.value是一个文本字段。虽然Postgres可以将所有非零整数(例如800)转换为布尔true,但将text转换为'800'boolean是不行的。

解决方案是检查product_features.value空虚和/或相等与'0'而不是CAST(product_features.value AS BOOLEAN) = true

相关问题