教义 - 防止相关表中的新 INSERT

Posted

技术标签:

【中文标题】教义 - 防止相关表中的新 INSERT【英文标题】:Doctrine - prevent new INSERT in related tables 【发布时间】:2012-06-13 22:29:50 【问题描述】:

使用 Zend Framework 1 和 Doctrine 1.2.4 构建的帮助/支持应用程序。

问题:在创建新的支持票证时,首先没有分配staff_id(支持人员),Doctrine 在staff 表中插入空行,因为staff_id 为NULL,并且没有匹配idNULL 值可以在staff 表中找到。

新票已创建,注意 staff_id 的 NULL 值

INSERT INTO tickets (closable, emergency, survey_sent, brands_id, departments_id, categories_id, status_id, staff_id, subject, contacts_id, mask, initial_categories_id, last_opened, last_activity, created_at, updated_at) VALUES ('0', '1', '0', '1', '4', '6', '1', NULL, 'Cancellation Request', '5463', 'MQXB-39568', '6', '2012-06-14 03:15:49', '2012-06-14 03:15:49', '2012-06-14 03:15:49', '2012-06-14 03:15:49')

staff 表中的新行带有一些默认值,这是问题

INSERT INTO staff (enable_dst, last_page, external_links, replies_per_page, active) VALUES ('1', '0', '0', '10', '1')

出现野查询

DELETE FROM staff_index WHERE (id = '197')

现在ticket_posts (post = staff note) 表用新插入的工单 ID 更新,staff 表中新插入的空白行(staff_id 此处应为 NULL)

UPDATE ticket_posts SET tickets_id = '12455', staff_id = '197', updated_at = '2012-06-14 03:15:49' WHERE id = '48113'

我通过将第二列(用户名)设置为不为空来“解决”空行,但不是真正的解决方案。


有没有办法告诉Doctrine,这里无事可做,继续?


(^底线)

【问题讨论】:

向我们展示您插入的代码 @j0k 基本上是$new_ticket = new Tickets(); $new_ticket->fromArray($formData);... 【参考方案1】:

在持久化对象之前,您是否访问过 Ticket 实例的 Staff 属性?这可能是 Doctrine 创建“空”记录的问题。

$ticket = new Ticket();
$ticket->Staff = NULL; # Doctrine will now add empty record.
$ticket->save();

【讨论】:

嗨,不,它是从 POST 数组中填充的...$new_ticket = new Tickets(); $new_ticket->fromArray($formData);,如果没有分配,staff_id 为空''...谢谢。 您的表单是否在某处有“员工”关系?例如,这可能是问题所在。没有从 【参考方案2】:

http://doctrine.readthedocs.org/en/latest/en/manual/working-with-models.html#clearing-related-records

public function preSave()

    if (empty($this->staff_id))
        $this->clearRelated('Staff');

【讨论】:

以上是关于教义 - 防止相关表中的新 INSERT的主要内容,如果未能解决你的问题,请参考以下文章

教义 - 在多对多关系表中插入记录

Symfony:通过控制器更新外键的教义

教义 2 - 获取所有记录

教义2多对多带翻译

教义实体映射不正确

教义 orm:绕过延迟加载并在 getter 中预取相关记录