MySQL是否删除仅存在于子表/cakephp更新中的记录?

MySQL是否删除仅存在于子表/cakephp更新中的记录?,mysql,cakephp,Mysql,Cakephp,我有两张Myisam表,比方说Parent和Child。父级是在perl脚本中创建的。父级是子级获取所有相同信息(不用于编辑)的位置,而子级则保存其唯一的信息。按照Cakephp命名约定,它们通过父项id字段和子项的父项id进行连接。当父表通过另一个应用程序(通过Perl添加的记录)进行更新时,它会显示在子项中,但如果删除记录,则子项不会更新。是否有一种遵循cakephp约定的方法来更新表(删除在父级中删除的记录)? 我在子级的父表中确实有'dependent'=>true?需要在子表中吗?或者

我有两张Myisam表,比方说Parent和Child。父级是在perl脚本中创建的。父级是子级获取所有相同信息(不用于编辑)的位置,而子级则保存其唯一的信息。按照Cakephp命名约定,它们通过父项id字段和子项的父项id进行连接。当父表通过另一个应用程序(通过Perl添加的记录)进行更新时,它会显示在子项中,但如果删除记录,则子项不会更新。是否有一种遵循cakephp约定的方法来更新表(删除在父级中删除的记录)? 我在子级的父表中确实有'dependent'=>true?需要在子表中吗?或者,由于表是在应用程序之外更新的,所以这无关紧要吗

如果没有其他问题,我可以设置一个cron作业来定期检查表,但我不确定如何通过MYSQL查找/删除子表中不再存在于父表中的记录。连接的组合,在什么地方?因此,我的问题是,如果表在应用程序之外更新,我可以用cakephp来完成吗?或者我该如何使用mysql呢

代码:


这里有一个小小的查找调用,您可以使用它来获取所有孤儿记录:

$this->Drug->FrenchTranslation->find('all', array(
  'fields' => array('id'),
  'conditions' => array(
    'Drug.id' => null
  ),
  'contain' => array(
    'Drug' => array(
      'fields' => array('id')
    )
  )
));
这应该调用如下的SQL命令

SELECT `FrenchTranslation`.`id`, `Drug`.`id` 
FROM `french_translations` AS FrenchTranslation
LEFT JOIN `drugs` AS `Drug` ON (`Drug`.`id` = `FrenchTranslation`.`drug_id`)
WHERE `Drug`.`id` IS NULL

这将返回所有孤立子记录,然后您可以遍历并删除这些记录。你必须为每个孩子做这件事。

你能展示你的模型关系吗?@jeremyharris用我的模型代码更新了帖子?如果你不是这个意思,让我知道。这看起来不错。您如何使用
$this->Drug->delete()
删除它?因为这会删除所有相关的法语翻译、德语翻译和西班牙语翻译记录。父表(药物)的记录会被另一个用perl编写的应用程序删除,这就是为什么我想知道是否可以简单地用cakephp来做,以及为什么我问起mysql。我可以通过我的应用程序端将记录从子表中删除,但这意味着它必须删除两次?一旦在另一个程序员编写的perl脚本中删除父级中的记录,并再次确保子级中的法语翻译是最新的。这将是一个很好的信息。perl脚本应该在应用程序中调用一个操作,这样您就可以控制删除的内容,或者perl脚本应该知道如何删除子项。如果这两个都不是选项,听起来像是常规的CRON清理就可以了。做了我想做的事情!现在开始为cron编写此脚本:D
SELECT `FrenchTranslation`.`id`, `Drug`.`id` 
FROM `french_translations` AS FrenchTranslation
LEFT JOIN `drugs` AS `Drug` ON (`Drug`.`id` = `FrenchTranslation`.`drug_id`)
WHERE `Drug`.`id` IS NULL