【问题标题】:CakePHP associating Users with one CityCakePHP 将用户与一个城市相关联
【发布时间】:2013-04-13 10:00:51
【问题描述】:

我有一个用户表和一个城市表,我想将它们相互关联。正如您所猜测的,一个城市可以有多个用户,但一个用户只能链接到一个城市。

我真的不知道如何布置我的桌子。当我为 City 尝试 $hasMany 关系并为我的 User 尝试 $hasOne 时,我收到一个错误,因为在我的城市表中找不到 client_id 字段。我的城市表将被修复:没有人会改变表。我只是想在这张表中存储一些关于某个城市的信息。

编辑:这是我的表格和模型(保持简单):

clients { id, firstname, lastname, city_id }
cities { id, name, some_other_data }

这是我的模型:

// User
class Client extends AppModel {
    public $hasOne = array(
        'City'
    );
}

// City
class City extends AppModel {
    public $useTable = 'cities';

    public $hasMany = array(
        'Client'
    );
}

【问题讨论】:

  • 你能用模型更新你的问题吗(如果你有的话,用户和城市),你表的列/名称?
  • 您有 UserCity 表,但应该有 userscities... 或者更确切地说是 clientscities 根据我所看到的在你的模型中
  • 那不是问题。我遵循 CakePHP 的命名约定。我的用户模型可以访问数据。但我无法让'$hasOne city'工作,因为当我设置它时,我得到了这个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'City.client_id' in 'on clause'

标签: cakephp associations has-one database-relations


【解决方案1】:

可能不行,我们必须指定外键

    // User
class Client extends AppModel {
    public $belongsTo = array(
        'City'=> array(
        'className' => 'City',
        'foreignKey' => 'city_id'
     ) ,
    );
}
// City
class City extends AppModel {
    public $useTable = 'cities';

public $hasMany = array(
    'Client' => array(
        'className' => 'Client',
        'foreignKey' => 'city_id'
     ) ,
  ); 
}

【讨论】:

  • 这应该不是问题,OP已经正确使用了CakePHP约定,所以添加ClassName和foreignKey是不需要
【解决方案2】:

你需要反转关系;客户“属于”一个城市。 (我知道,这听起来不合逻辑);

// User
class Client extends AppModel {
    public $belongsTo = array(
        'City'
    );
}

// City
class City extends AppModel {
    public $useTable = 'cities';

    public $hasMany = array(
        'Client'
    );
}

您的 clients-table 应该包含一个 city_id 字段以使其正常工作(只需查看您的 table-definition 并且它已经存在,因此只需更改 Client-model 即可使其适合您)。

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多