gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:26:12 25 4
gpt4 key购买 nike

我有两个 Myisam 表,比如说 Parent 和 Child。父级是在 perl 脚本中创建的。父级是子级获取完全相同的信息(不可编辑)的地方,而子级则保存其独有的信息。遵循 Cakephp 命名约定,它们通过 Parent 的 id 字段和 child 的parent_id 连接。当通过另一个应用程序更新父表(通过 Perl 添加记录)时,它会显示在子表中,但如果删除记录,则子表不会更新。有没有一种方法可以遵循 cakephp 约定来更新表(删除在父级中删除的记录)?我在子项的父表中确实有 'dependent' => true 吗?这需要在子表中吗?或者这并不重要,因为表格是在应用程序外部更新的?

如果没有别的办法,我也许可以设置一个 cron 作业来定期检查表,但我不确定如何通过 查找/删除子表中不再存在于父表中的记录MYSQL。连接和 where such n such <> 的组合?所以我的问题是,如果表格在应用程序外部更新,我可以使用 cakephp 来完成此操作吗?或者我将如何使用 mysql 来做到这一点?

代码:

<?php
class Drug extends AppModel {
var $name = 'Drug';
var $order = "Drug.generic ASC";
var $useDbConfig = 'default';
var $actsAs = array('ExtendAssociations', 'Containable');

var $hasOne = array(
'FrenchTranslation' => array(
'className' => 'FrenchTranslation',
'dependent' => true
),
'GermanTranslation' => array(
'className' => 'GermanTranslation',
'dependent' => true
),
'SpanishTranslation' => array(
'className' => 'SpanishTranslation',
'dependent' => true
)
);
}
?>

<?php
class FrenchTranslation extends AppModel {
var $name = 'FrenchTranslation';
var $validate = array(
'drug_id'=>array(
'The drug_id must be unique.'=>array(
'rule'=>'isUnique',
'message'=>'The Drug ID must be unique.',
'on'=>'create'
),
'The drug_id must be numeric.'=>array(
'rule'=>array('numeric'),
'message'=>'The Drug ID must be numeric.'
)
),
'id'=>array(
'The id must be unique.'=>array(
'rule'=>'isUnique',
'message'=>'The ID must be unique.',
'on'=>'create'
),
'The id must be numeric.'=>array(
'rule'=>array('numeric'),
'message'=>'The ID must be numeric.'
)
)
);

var $belongsTo = array(
'Drug' => array(
'className' => 'Drug',
'foreignKey' => 'drug_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'User'=>array(
'className'=>'User',
'foreignKey'=>'user_id'
),
);
}
?>

最佳答案

这里有一个小的 find 调用,您可以使用它来获取所有孤立的子记录:

$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

这将返回所有孤立的子记录,然后您可以迭代并删除它们。您必须为每个 child 执行此操作。

关于MySQL删除仅存在于子表/cakephp更新中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10916472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com