Symfony从路线获取对象不起作用

时间:2012-05-30 11:14:01

标签: php symfony1 doctrine symfony-1.4 doctrine-1.2

最近我将一个数据库表的列更改为另一个。在我执行迁移原则之后:

$this->getRoute()->getObject()

我返回了一个错误:

  

“SQLSTATE [42S22]:未找到列:1054未知列   '字段列表'中的'p.price_discount'“

如果我:

ProductTable::getInstance()->find(1);

一切正常!

我将缓存完成1000次并构建 - 所有这些都是。

我的schema.yml:

Product:
  tableName: products
  actAs:
    Timestampable:
      created:
        name: created_at
        type: timestamp
        form: d-m-Y H:i:s
    I18n:
      fields: [title, subtitle, description, datasheet, returns_shippings, inspiration, use_care]
      actAs:
        Sluggable: { fields: [title], uniqueBy: [lang, title] }
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    ref:
      type: string(45)
      unique: true
      notnull: true
    active:
      type: boolean
      notnull: true
      default: 0
    new:
      type: boolean
      notnull: true
      default: 0
    title:
      type: string(45)
    subtitle:
      type: string(45)
    inspiration: clob
    use_care: clob
    brand:
      type: string(45)
    description:
      type: clob(65535)
    datasheet:
      type: clob(65535)
    returns_shippings:
      type: clob(65535)
    price:
      type: float
      notnull: true
      default: 0
    votes:
      type: integer
      notnull: true
      default: 0
    weight:
      type: float
      notnull:  true
      default:  0
    iva_id:
      type: integer(4)
      notnull: true
  relations:
    Iva:
      class: Iva
      local: iva_id
      foreign: id
      foreignAlias: Products
    Styles:
      foreignAlias: Products
      class: Style
      refClass: StyleProduct
      onDelete: CASCADE
    Categories:
      foreignAlias: Products
      class: Category
      refClass: CategoryProduct
      onDelete: CASCADE
    RelatedProducts:
      foreignAlias: Products
      class: Product
      refClass: RelatedProduct
      local: product_id
      foreign: product_id1
      onDelete: CASCADE

会发生什么?

1 个答案:

答案 0 :(得分:1)

你的最后评论是对的。

Doctrine query cache正在使用apc作为后端来存储映射DQL request => SQL请求,难以计算,几乎从不更改:当您更改模型时,它会发生变化。

例如,如果添加列,则以下查询在转换为SQL时会给出不同的结果:SELECT * FROM User u

这是因为SQL请求列出了所有字段,因此成为

SELECT name, email FROM user

应该成为

SELECT name FROM user

删除电子邮件列后,但由于查询缓存而没有。