CakePHP bindModel 工作,预设模型关联不

Posted

技术标签:

【中文标题】CakePHP bindModel 工作,预设模型关联不【英文标题】:CakePHP bindModel working, preset Model associations not 【发布时间】:2011-01-29 04:48:56 【问题描述】:

我正在开发一个个人项目。

我有两个模型“Show”和“Episode”。我有一个控制器“Ops”。

显示模型:

class Show extends AppModel

 var $name = 'Show';

 var $hasMany = array(
  'Episode' => array(
   'className' => 'Episode',
   'foreignKey' => 'show_id'
  )
 );

剧集模型:

class Episode extends AppModel

 var $name = 'Episode';

 var $belongsTo = array(
  'Show' => array(
   'className' => 'Show',
   'foreignKey' => 'show_id'
  )
 ); 

运维控制器:

class OpsController extends AppController

 var $name = 'Ops';
 var $uses = array('Show','Episode');

 function index()
 
  $episodes = $this->Episode->find('all',array(
   'limit' => 10,
   'order' => array('Episode.first_aired' => 'DESC'),
   )
  );
  debug($this->Episode);
  debug($episodes);

 

运行 Ops 控制器时,我得到了我想要的“Episode”记录,但没有获得基于“belongsTo”配置中的“show_id”的关联“Show”记录。看来它根本没有引用模型,因为我可以故意破坏模型类而请求仍在继续。

经过大量检查、研究和测试后,我能够通过在 find() 请求之前将以下内容添加到 Ops 控制器中来使其工作:

$this->Episode = ClassRegistry::init('Episode');
$this->Episode->bindModel(
 array('belongsTo' => array(
   'Show' => array(
    'className' => 'Show'
   )
  )
 )
);

虽然这可行,但我仍然想知道为什么我的模型没有被正确调用。非常感激任何的帮助。谢谢!

【问题讨论】:

【参考方案1】:

如果你以同样的方式查询Show会发生什么?

您确定id 字段的定义正确吗?

在两个表上都应该有id(INTsize),在episodes上也应该有show_id(INTsize)。

如果它是根据 Cake 约定设置的,您应该可以删除 'foreignKey' => 'show_id' 行,Cake 会自行整理。`

【讨论】:

是的,我已经仔细检查了字段类型并且设置正确。我也尝试过使用和不使用具有相同结果的“foreignKey”设置。我正在处理的主要问题是使用 $uses 变量时未包含模型类。我故意在我的模型中添加错误,而“使用”它们的控制器不会出错。【参考方案2】:

听起来 Cake 没有使用您的模型文件,而是根据表格自动生成一些模型文件。 这听起来很愚蠢,但请检查文件夹和文件名是否有拼写错误以及它们是否为小写。

【讨论】:

【参考方案3】:

在您的 Show 模型中,您将 Episode 外键设置为 show_id,它应该是 episode_id。但是,我不认为这是导致问题的原因。

据我所知,您没有更改任何 Cakephp 命名约定,因此只需删除定义关联的数组并保留为字符串,例如

class Show extends AppModel

 var $name = 'Show';

 var $hasMany = array(
  'Episode'
 );


class Episode extends AppModel

 var $name = 'Episode';

 var $belongsTo = array(
  'Show'
 ); 

这可能不起作用,但我之前遇到过类似的问题,这解决了它。祝你好运。

【讨论】:

以上是关于CakePHP bindModel 工作,预设模型关联不的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 中关联模型的名称

CakePHP 模型验证无法正常工作

CakePHP find() 不能跨模型工作

在 Cakephp 中保存和读取三个模型

在 CakePHP 3 中保存多个 belongsToMany 关联

CakePHP 中的多级模型关联