我如何获得cakephp当前模型的外键列名?

时间:2013-08-11 09:59:50

标签: cakephp cakephp-2.3

有没有办法在其他模型中获取当前模型的外键名称

echo $this->Category->whatIsMyForeignKeyName();
// expected output 'category_id'

编辑:版本

strtolower($this->Category->alias).'_id'
不知怎的,似乎没有蛋糕精神。

3 个答案:

答案 0 :(得分:5)

如果您知道它是什么类型的关系(例如,属于),您可以在定义的关系中轻松查找它:

$foreignKey = $this->belongsTo['Category']['foreignKey'];

答案 1 :(得分:3)

你使用strtolower所做的事情几乎可以在所有(或者全部?)的案例中使用,但稍微更彻底的方法就是:

$fkey = Inflector::singularize(Inflector::tableize($this->Category->alias)).'_id';

但我要问的问题是你为什么要那样做?为什么不把它硬编码为'category_id'?

答案 2 :(得分:0)

我有同样的问题,我用另一种方式解决了。

joshua.paling的解决方案会找到默认外键。无论如何,我认为你可以更容易地找到它:

Inflector::underscore($baseModelName).'_id';

但事实上,每个协会的模型可能有不同的外键。让我们假设有一个“基础”,它有许多“关联”(这些是模型的虚拟名称)。关系是“hasMany”关系。

所以你对“基础”模型的定义如下:

class Base extends AppModel {
  public $hasMany = array(
    'Associated'
  );
}

在“BaseController”中,您可以通过以下方式检索将这些模型链接在一起的外键:

$this->Base->hasMany['Associated']['foreignKey']

这是用于将“关联”行链接到数据库中相关“基准”行的外键。

我知道这个问题已经在一年多前得到了回答,但我希望我的回答可以帮助其他人:)