教义 - 防止相关表中的新 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,并且没有匹配id
与NULL
值可以在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的主要内容,如果未能解决你的问题,请参考以下文章