2

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

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

编辑:版本

strtolower($this->Category->alias).'_id'

不知何故,似乎没有蛋糕的精神。

4

3 回答 3

5

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

$foreignKey = $this->belongsTo['Category']['foreignKey'];
于 2013-08-11T10:21:33.563 回答
3

您对 strtolower 所做的操作几乎适用于所有(或者可能是所有?)情况,尽管稍微更彻底的方法如下:

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

但我要问的问题是你为什么要这样做?为什么不直接将其硬编码为“category_id”?

于 2013-08-11T10:22:17.383 回答
0

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

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

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

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

因此,您对“基本”模型的定义如下:

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

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

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

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

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

于 2014-08-30T13:54:20.637 回答