对于使用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
查询构建器有其局限性。这就是查询方法存在的原因。如果您有复杂的查询,建议您使用$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] 删除。
我来说两句