2012-03-12 66 views
0

我挣扎摸出当从模型B验证独特场HABTM连接表

这里是澄清我的问题的例子的场组合如何来验证模型的一个领域,应该是唯一的:

Page hasMany SitesPage 
SitesPage belongsTo Page, belongsTo Site 

页有这应该是整个网站中唯一的蛞蝓场。网页可以连接到任何网站。

Page.id 
Page.slug 

SitesPage.id 
SitesPage.site_id 
SitesPage.page_id 

我有一个checkUniqueSlug()自定义的验证方法,在我的页面模式,但无法验证蛞蝓是唯一的SITE_ID存储在SitesPage的网站是不具备的页面模型验证方法($这 - >数据只包含页面模型数据)。

我不能做的SitesPage模型验证作为SitesPage没有蛞蝓场,我无法看到页帖子是SitesPage。

如何创建一个自定义验证来检查slug是否是网站特有的?

一种解决方案是将slug移动到SitesPage模型中,但我们需要所有共享页面具有相同的slug。即共享“关于我们”页面必须不管有一个“about_us”蛞蝓哪个网站的页面被附接到。

另一种解决方案是在我保存之前在控制器中执行验证,但是这种方法在模型中进行验证时会感觉错误。

回答

0

由于没有出现过答案,别人可能会寻求帮助,这里就是我结束了一个解决方案:

由于控制器是其中两个模型数据存在于数据阵列中的唯一场所,验证呼叫已在那里进行。

我卸载验证码到模型上,有以下称之为:

if (!empty($this->request->data)) { 

    if ($this->Model->specialMultiModelValidate($this->request->data) && $this->Model->save($this->request->data)) { 

    // model has validated and saved 

    } 
    else { 

    // model has failed to validate and save 

  } 

} 

希望有人认为这是有用的。