带有QueryBuilder JOIN查询的Codeigniter模型

seixwebdev:

对于使用CI4的模型并尝试适应现有的MySQL JOIN查询以使其与《用户指南》中的示例配合使用而言,这确实是一个新手。

我已经修改了部分代码,如下所示:

    public function brand_name($brand_name_slug)
    {
        return $this->asArray()
                    ->where('availability', 'in stock')
                    ->where('sku !=', '')
                    ->where('brand_name_slug', $brand_name_slug)
                    ->groupBy('gtin')
                    ->orderBy('brand_name, subbrand_name, product, size, unit')
                    ->findAll();
    }

工作正常。我查看了示例,并弄清楚了我可以添加代码->table('shop a')并且它仍然有效,但是我还需要添加以下JOIN语句:

JOIN (SELECT gtin, MIN(sale_price) AS sale_price FROM shop GROUP BY gtin) AS b ON a.gtin = b.gtin AND a.sale_price = b.sale_price

添加后,->join('shop b', 'a.gtin = b.gtin and a.sale_price = b.sale_price')我立即收到“ 404-未找到文件”错误。

当我看到所有示例的CI4连接和我的代码适应适应,我的foreach($shop as $row)循环,因为他们有一个端产生一个“哎呦......”错误getResult()getResultArray代替- findAll()

这是前进的方向,我是否需要更改foreach循环。

完整的MySQL语句:

SELECT * FROM shop a JOIN (SELECT gtin, MIN(sale_price) AS sale_price FROM shop GROUP BY gtin) AS b ON a.gtin = b.gtin AND a.sale_price = b.sale_price WHERE availability = 'in stock' AND sku != '' AND brand_name_slug = $brand_name_slug GROUP BY gtin ORDER BY brand_name, subbrand_name, product, size
ViLar:

查询构建器有其局限性。这就是查询方法存在的原因。如果您有复杂的查询,建议您使用$this->query();
这将使您减少浪费的时间和精力来转换已知的功能。最重要的是,在转换复杂查询时,您通常最终会使用查询构建器,但其中包含很大一部分SQL。

在您的模型扩展中CodeIgniter\Model

    $query = $this->db->query("SELECT * FROM shop a JOIN (SELECT gtin, MIN(sale_price) AS sale_price FROM shop GROUP BY gtin) AS b ON a.gtin = b.gtin AND a.sale_price = b.sale_price WHERE availability = 'in stock' AND sku != '' AND brand_name_slug = \$brand_name_slug GROUP BY gtin ORDER BY brand_name, subbrand_name, product, size");

    // your array result
    $result_array = $query->getResultArray();
    // your object result
    $result_object = $query->getResult();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在词条查询中具有动态列表值的elasticsearch QueryBuilder

如何在formbuilder中使用带有选择标签的querybuilder?

有人可以建议使用带有多个“ where”子句的Doctrine(QueryBuilder)进行此查询的方法吗?

Laravel-具有join和concat的Querybuilder

如何使用laravel Eloquent Querybuilder编写带有子查询的选择查询?

带有多个模型的Laravel Ajax实时搜索查询

COUNT返回带有NULL的LEFT JOIN查询的模糊结果

带有JOIN的SELECT查询返回每行的重复项

不带LOOP的SQL中带有join语句的动态查询

Laravel QueryBuilder-对于相同的查询,带有`where()`和`whereRaw()`的结果不同

多个带有INNER JOIN不同参数的SQL查询?

意外的JavaAssistLazyInitializer甚至带有INNER JOIN FETCH查询

如何使用带有子查询的join优化查询?

带有IF ELSE选定选项的MySQL JOIN查询显示列

带有子查询的Oracle JOIN-无效的表名

带有联合子查询的FULL OUTER JOIN

格式化带有多个联接的RIGHT JOIN查询

LINQ查询数据库返回带有列表的模型,当模型确定但列表为空时

带有IF和INNER JOIN的SQL查询说明

带有不同模型注释的复杂查询集

带有子查询语法的LEFT OUTER JOIN

Django,带有基于模型属性的查询的ModelManager

教义QueryBuilder查询:具有多个关联

在模型中带有列表的猫鼬查询

在codeigniter中查询带有外键的表

Join 是否等同于带有列子查询的查询?

带有 INNER JOIN 和子查询的 WHERE 子句

无法在带有 @GeoSpatialIndexed 的模型中查询 geoNear

如何将带有子查询的 SQL 查询转换为 Doctrine QueryBuilder 格式?