【问题标题】:Cakephp naming convention for table表的 Cakephp 命名约定
【发布时间】:2016-01-19 04:22:03
【问题描述】:

我是 CakePHP 的新手,正在为客户服务请求构建我的第一个 Web 项目。 我在数据库中有以下表格...

  • 客户
  • 客户地址
  • customer_service_requests
  • service_requests

service_requests 表有外键:

  • customer_id
  • customer_address_id

在为服务请求烘焙 MVC 时,出现以下错误

错误:在数据源默认值中找不到模型 CustomerAddress 的表 customers_addresses。

ServiceRequest 模型有一个 belongsTo 关系为

'CustomerAddress' => arrray(
  'className' => 'CustomerAddress',
  'foreignKey' => 'customer_address_id',
  'conditions' => ' ',
  'fields' => ' ',
  'order' => ' '
 )

cakephp 版本:2.7.8

【问题讨论】:

  • 请始终提及您的 准确 CakePHP 版本 - 谢谢!表名看起来正确。我有点怀疑错误是否源于显示的关联,因为这应该查找名为 customer_addresses 的表,请参阅 inflector.cakephp.org/CustomerAddress (tableize)。如果 bake 查找 customers_addresses,那么您可能正在使用有问题的 CakePHP 版本,或者您在某处有拼写错误,或者导致 bake 查找 hasAndBelongsToMany 连接表的 customers 和 @987654327 的名称@(即使在这种情况下应该颠倒),或者......
  • 我已经检查了变形器,tableized 的结果是 customer_addresses。我正在使用 cakephp v 2.7.8

标签: cakephp naming-conventions cakephp-2.x


【解决方案1】:

看起来按照惯例,他们期望数据库表名是模型 CustomerAddress 的 customers_addresses 。

你有两个选择。

  1. 要么将你的数据库表名修改为customers_addresses。

  2. 创建一个模型 CustomerAddress.php 并在您的模型中写入以下行。

    class CustomerAddress extends AppModel{
    
        public $useTable = "customers_addresses";
    }
    

和平! xD

【讨论】:

  • 将 customer_addresses 重命名为 customers_addresses 那么我必须将外键相应地更改为 customers_address_id 吗?我使用的命名约定是错误的吗?
  • 您不一定要更改外键。您可以改为在连接数组中指定它,就像您在上面所做的那样。例如,“foreignKey”=>“customer_address_id”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多