如何制作学说不要尝试更新表格?

时间:2013-03-06 15:40:27

标签: php oracle view doctrine doctrine-1.2

我正在开发一个项目,我们使用视图在另一个系统之间创建一个接口/层,该系统是一个数据源但没有匹配的模型。这样,在我的系统中,这些视图实际上是模型。到目前为止,一切都工作得很好,除了这一部分:

-------------------------------
|Table    |Table        |View |
-------------------------------
|Order  > |OrderItem  > |Item |
-------------------------------

Relation: Order (has many)> OrderItem (has many)> Item.

我最近遇到了一个问题,它试图保存表格(订单)的整个关系集。系统应该保存订单及​​其物品(订单商品)。但不知何故,保存最终会引发项目模型的更新,这是一个视图并返回此错误,显然:

代码:

$order->save();

错误:

Data manipulation operation not legal on this view : UPDATE ITEM (...)

有没有办法跟踪它,强制它不发生,或将其设置为只读模型?

1 个答案:

答案 0 :(得分:1)

当视图由来自不同表的元素组成时,mysql中会发生此错误。

如果您编辑同一个表中的列,则可以,但如果同一查询尝试编辑不同表的列,则会出现错误。

你还在使用Doctrine 1.2吗? 我认为使用Doctrine的观点很棘手Link

此外,错误可能来自您在实体上声明关系的方式:

有: 订购多对多OrderItem多对一项。

你应该确保采取OrderItem>的关系;项目为unidirectional,OrderItem为拥有方。