有没有办法在其他模型中获取当前模型的外键名称
echo $this->Category->whatIsMyForeignKeyName();
// expected output 'category_id'
编辑:版本
strtolower($this->Category->alias).'_id'
不知怎的,似乎没有蛋糕精神。
答案 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']
这是用于将“关联”行链接到数据库中相关“基准”行的外键。
我知道这个问题已经在一年多前得到了回答,但我希望我的回答可以帮助其他人:)