【问题标题】:Insert SQL query into controller in cakephp在 cakephp 中将 SQL 查询插入控制器
【发布时间】:2015-04-21 03:00:51
【问题描述】:

我使用的是 cake php 版本 2.4.1

我想在 cakePHP 中将此 SQL 查询更改为我的控制器的 PHP 代码

SELECT id,name 
FROM providers 
WHERE id not in 
    (SELECT c.provider_id 
    FROM token_maps a 
    INNER JOIN token_map_groups b ON b.token_map_id = a.id 
    INNER JOIN token_map_group_providers c on c.token_map_group_id=b.id 
    LEFT JOIN providers p on p.id=c.provider_id 
    WHERE a.id=2
    )

我不能使用$this->Provider->query('sql query'); 因为它会给我错误的结果,这与我在 mysql 中执行查询时不同。

谁能帮帮我?

【问题讨论】:

  • 如果您在模型 Provider.php 中,请使用:$this->query('sql query');。如果你在其他模型,写你的方式是好的。如果您的模型类未加载,请尝试$Provider_Model = ClassRegistry::init('Provider'); $result_array = $Provider_Model->query(...);

标签: php mysql sql-server cakephp


【解决方案1】:

一开始我告诉过你,在任何 MVC 框架中都不推荐你的方法。你需要在Provider模型中声明一个方法,然后你就可以编写cakePHP自定义查询了。

How to create custom MySQL queries in CakePHP?

【讨论】:

    【解决方案2】:

    如果您的查询在 PHPMYADMIN 中给出了准确的答案,则进行如下查询:

    $this->loadModel('Provider');
    
    $query = "SELECT id,name FROM providers WHERE id not in (SELECT c.provider_id  FROM token_maps a 
    INNER JOIN token_map_groups b ON b.token_map_id = a.id 
    INNER JOIN token_map_group_providers c on c.token_map_group_id = b.id 
    LEFT JOIN providers p on p.id=c.provider_id 
    WHERE a.id=2
    )";
    
    $this->Provider->query($query);
    

    【讨论】:

    • 不推荐(在不推荐的范围内 - 就像“完全错误”下面的一步)将 sql 放入控制器中 - 将其放入模型中(如果实际需要原始 sql)并调用模型方法。
    • 在模型中,默认情况下它会在任何地方调用。如果您需要某个地方,请在控制器中使用
    • 这不是模型应该被使用的方式。 raw-sql 不是“参数”
    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多