有没有办法在其他模型中获取当前模型的外键名称,像这样
echo $this->Category->whatIsMyForeignKeyName();
// expected output 'category_id'
编辑:版本
strtolower($this->Category->alias).'_id'
不知何故,似乎没有蛋糕的精神。
有没有办法在其他模型中获取当前模型的外键名称,像这样
echo $this->Category->whatIsMyForeignKeyName();
// expected output 'category_id'
编辑:版本
strtolower($this->Category->alias).'_id'
不知何故,似乎没有蛋糕的精神。
如果您知道它是什么类型的关系(例如 belongsTo),您可以轻松地在定义的关系中查找它:
$foreignKey = $this->belongsTo['Category']['foreignKey'];
您对 strtolower 所做的操作几乎适用于所有(或者可能是所有?)情况,尽管稍微更彻底的方法如下:
$fkey = Inflector::singularize(Inflector::tableize($this->Category->alias)).'_id';
但我要问的问题是你为什么要这样做?为什么不直接将其硬编码为“category_id”?
我有同样的问题,我用另一种方式解决了它。
joshua.paling 的解决方案会为您找到默认外键。无论如何,我认为您可以更轻松地找到它:
Inflector::underscore($baseModelName).'_id';
但事实上,一个模型可能对每个关联都有不同的外键。假设有一个“基础”并且它有许多“关联”(这些是模型的虚拟名称)。关系是“hasMany”关系。
因此,您对“基本”模型的定义如下:
class Base extends AppModel {
public $hasMany = array(
'Associated'
);
}
在“BaseController”中,您可以通过以下方式检索将这些模型链接在一起的外键:
$this->Base->hasMany['Associated']['foreignKey']
这是用于将“关联”行链接到数据库中相关“基本”行的外键。
我知道这个问题已经在一年前得到回答,但我希望我的回答可以帮助其他人:)