使用现有表对CAKEPHP3表进行建模

使用现有表对CAKEPHP3表进行建模,cakephp,model,cakephp-3.0,Cakephp,Model,Cakephp 3.0,我需要你的帮助来理解CakePHP的一些特性 我有一个SQL表:user。 我使用烘焙模型生成:UserTable 在我的UsersController的操作home()中,我有以下内容: $t_Results = TableRegistry::get('User')->findByLogin('jdupont')->execute()->fetchAll('assoc'); debug($t_Results); 查询是由Cake生成的,该代码运行良好 我的问题是: 我是否

我需要你的帮助来理解CakePHP的一些特性

我有一个SQL表:user。 我使用烘焙模型生成:UserTable

在我的UsersController的操作home()中,我有以下内容:

$t_Results = TableRegistry::get('User')->findByLogin('jdupont')->execute()->fetchAll('assoc');
debug($t_Results);
查询是由Cake生成的,该代码运行良好

我的问题是:

  • 我是否必须在模型内部创建findByLogin函数
  • 我的代码正确吗

谢谢你的帮助;)

检查代码是否正确的最快方法之一是实际运行代码并查看它是否返回您期望的结果

findByLogin()
是一个Cake,因此您不需要定义此方法,因为Cake会动态地为您定义此方法。您可以使用
findBy
作为任何驼峰大小写的列名的前缀,以使用该列查询表

您可以这样使用它:-

$t_Results = $this->Users->findByLogin('jdupont')->first();

是的,您可以在模型中创建findByLogin,但不必这样做

您的代码可以工作,但不遵守约定。 用cakephp3 SQL表是单数小写, 表文件的首字母大写,复数后缀为Table, 控制器为复数首字母大写,后缀为控制器

如果在控制器中遵循这些约定,则可以执行以下操作:

$t_Results = $this->Users->findByLogin('jdupont')->execute()->fetchAll('assoc');
debug($t_Results);

您不必使用->执行()。查询对象是惰性计算的,当您使用请求时将调用execute。

是的,您可以在模型中创建findByLogin谢谢,我刚刚生成了模型文件,我在里面写了任何东西,它都可以工作,那么为什么要创建函数呢?最佳做法是什么?谢谢。*桌子是复数的……谢谢你的帮助。是的,我知道我不重复这些约定,但我正在用现有的数据库开发一个应用程序。我不能重命名它谢谢你的帮助,这对我真的很有帮助:)非常感谢;)