CakePHP3:如何在表模型中运行自定义SQL查询

CakePHP3:如何在表模型中运行自定义SQL查询,php,mysql,cakephp,Php,Mysql,Cakephp,在CakePHP3中,是否可以从表模型中运行自定义SQL查询?如果是,怎么做 我在表格模型中尝试了以下操作: public function getUsersByLocation($location) { $sql = "SELECT `user_id`, `username` FROM `user` WHERE `location` = ?"; $rows = $this->query($sql, [$location]); } (出于示例目的,查询特意简单。) 但是,

在CakePHP3中,是否可以从表模型中运行自定义SQL查询?如果是,怎么做

我在表格模型中尝试了以下操作:

public function getUsersByLocation($location)
{
    $sql = "SELECT `user_id`, `username` FROM `user` WHERE `location` = ?";
    $rows = $this->query($sql, [$location]);
}
(出于示例目的,查询特意简单。)

但是,当我在
$rows
中循环时,这将导致无限循环

我感到惊讶的是,CakePHP3在文档中的任何地方都没有清楚地记录从表模型运行的自定义查询。他们目前正在强迫用户使用CakePHP自己的许多专有方法来粘合各种查询。

所以只需使用php即可 在你的Table类中

这些都在.

中有非常清楚的记录,因此只需使用php即可 在你的Table类中

所有这些都清楚地记录在中。

以下是答案:

public function getUsersByLocation($location)
{
    $sql = "SELECT `user_id`, `username` FROM `user` WHERE `location` = ?";
    return $this->connection()->execute($sql, [$location])->fetchAll('assoc');
}
答案如下:

public function getUsersByLocation($location)
{
    $sql = "SELECT `user_id`, `username` FROM `user` WHERE `location` = ?";
    return $this->connection()->execute($sql, [$location])->fetchAll('assoc');
}

在您的案例中,使用自定义查询毫无意义。无论如何,它都不如直接使用ORM。但是做自定义连接有很好的文档记录,所以在表模型中,我需要获取数据库连接(因为它可能不是通过依赖项注入传入的),然后在上面运行查询?多么糟糕的框架。不,从withtin表中,您不需要从外部世界获取连接,默认情况下,连接是通过构造函数注入的,并且可以通过方法访问(对于表,默认情况下将返回的实例)。也许你应该多注意一下你正在使用的非常糟糕的框架的文档,如果你以一种非常糟糕的方式滥用框架,不要责怪它。一般来说:如果你需要解决某个问题,你通常不会使用推荐的最佳实践方法。“行数越少越好。@请注意,在我的示例中,哪里有任何东西被滥用的情况非常糟糕?如果你有一个优雅的答案,请张贴,我会接受它。我很乐意改变我对这个框架的看法。在您的情况下,使用自定义查询毫无意义。无论如何,它都不如直接使用ORM。但是做自定义连接有很好的文档记录,所以在表模型中,我需要获取数据库连接(因为它可能不是通过依赖项注入传入的),然后在上面运行查询?多么糟糕的框架。不,从withtin表中,您不需要从外部世界获取连接,默认情况下,连接是通过构造函数注入的,并且可以通过方法访问(对于表,默认情况下将返回的实例)。也许你应该多注意一下你正在使用的非常糟糕的框架的文档,如果你以一种非常糟糕的方式滥用框架,不要责怪它。一般来说:如果你需要解决某个问题,你通常不会使用推荐的最佳实践方法。“行数越少越好。@请注意,在我的示例中,哪里有任何东西被滥用的情况非常糟糕?如果你有一个优雅的答案,请张贴,我会接受它。我很乐意改变我对这个框架的看法,你也可以直接使用有说服力的orm,而不是使用CakePHP orm。因为这两个项目都是与作曲家兼容的,所以这应该是非常简单的。很高兴听到我们想法相同。作为一名CakePHP核心开发人员,我不喜欢看到我们的用户在有简单解决方案时抱怨软件。祝你好运:)你也可以直接使用有说服力的orm,而不是使用CakePHP orm。因为这两个项目都是与作曲家兼容的,所以这应该是非常简单的。很高兴听到我们想法相同。作为一名CakePHP核心开发人员,我不喜欢看到我们的用户在有简单解决方案时抱怨软件。祝你好运:)