Doctrine - 防止相关表中的新INSERT

时间:2012-06-13 22:29:50

标签: php sql zend-framework orm doctrine

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

问题:在创建新支持服务单时,一开始没有分配staff_id(支持人员),Doctrine会在staff表中插入空行,因为staff_id为NULL,并且没有匹配的{{可以在id表中找到{}} NULL值的}}。

创建新故障单,记下staff

的NULL值
staff_id

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')

现在使用新插入的票证ID更新DELETE FROM staff_index WHERE (id = '197') (post =员工备注)表,ticket_posts表中新插入的空行(staff此处应为NULL)

staff_id

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


有没有办法告诉Doctrine,这里没什么可做的,继续前进?


(^底线)

2 个答案:

答案 0 :(得分:0)

在保留对象之前,您是否在Ticket实例上访问了Staff属性?这可能是Doctrine创造一个“空”记录的问题。

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

答案 1 :(得分:0)

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');
}