我试图在控制器中创建一个递归函数来测试是否已经创建了一个模型。我的模型与自身有一个hasMany / belongsTo关系(所以每个模型都有一个parent_id)。看起来像这样:
Site.php:
public $hasMany = array(
'Children' => array(
'className' => 'Site',
'foreignKey' => 'parent_id',
'dependent' => true
)
);
public $belongsTo = array(
'Parent' => array(
'className' => 'Site',
'foreignKey' => 'parent_id'
)
);
现在,每当用户访问新网站时,我的控制器都会检查并为找到的每个新链接创建新模型(链接是<a>
标记中的任何href)。这工作正常,但我不希望它在我的数据库中为已经添加到此站点的链接创建重复行,所以我正在做的是检查parent_id以查看该行是否已存在。
为此,我需要继续针对每个模型检查parent_id,直到其中一个模型没有parent_id(它为null,这是根域)。我在我的站点控制器中使用以下功能:
SitesController.php:
public function checkForExistingLink($site_id, $href) {
$conditions = array(
'Site.parent_id' => $site_id,
'Site.url' => $href
);
if($this->Site->hasAny($conditions)) {
debug('duplicate found');
debug($href);
debug($site_id);
return $site_id;
} else {
$parent_site = $this->Site->findById($site_id);
if($parent_site['Site']['parent_id'] == null) {
debug('no duplicate found');
debug($href);
return 0;
} else {
debug('recall function');
$this->checkForExistingLink($parent_site['Site']['parent_id'], $href);
}
}
}
然后在我的视图方法中,我调用此函数并将结果存储到变量:
$check_id = $this->checkForExistingLink($id, $href);
它似乎正在解析结果正常(所有调试都被正确命中),但是当我调试$check_id
时它返回null
。似乎无法找出原因。
如果有任何不清楚的地方,请询问,我会尝试更详细地解释这个问题。