【问题标题】:How do I make doctrine do not try to update a table?如何使学说不要尝试更新表?
【发布时间】:2013-03-06 15:40:26
【问题描述】:

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

-------------------------------
|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 (...)

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

【问题讨论】:

  • 嗨 CesarScur。很难理解你的问题。您能否添加一些示例代码?这也是PHP吗?然后也许将它标记为 PHP,因为它是一个更流行的标签——以获得更多关注。
  • 添加标签,TY。我怎样才能让事情更清楚?

标签: php oracle view doctrine doctrine-1.2


【解决方案1】:

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

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

你还在使用 Doctrine 1.2 吗? 我认为在 Doctrine 中使用视图很棘手Link

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

拥有: 订购多对多 OrderItem 多对一商品。

您应该确保关系 OrderItem > Item 是 unidirectional 并且 OrderItem 是 Owning 方。

【讨论】:

  • 我使用 oracle 作为数据库。我看到了学说视图,但就我而言,视图实际上是一个模型。我附有业务规则。使用 db 视图只是连接其他系统的一种方式。我可以使用一个过程来提供一个常规表,但问题是:我不希望教义更新这个表。我的描述确实是错误的,它有很多=/
  • 好的,但您得到的错误是因为 Doctrine 正在以 Oracle 不允许的方式编辑视图。这是错误原因和解决方案:ora-01732.ora-code.com.
  • oyu 可以在 save() 之前发布该过程吗?
  • oracle 指出的解决方案正是我正在寻找的,一种强制教义不尝试更新视图的方法,因为我没有调用直接项目保存并且无法预测原因这正在发生。只是不应该在任何情况下。我不能过去,因为它是业务逻辑,而且有数千行。
  • 好的,所以你必须创建一个方法(例如:save_order())来执行一个查询来管理保存。这样你就知道发生了什么。 stackoverflow.com/questions/10961743/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多