Symfony2,推进夹具和混凝土继承



我在Symfony2中加载推进装置时遇到了问题。我有以下架构:

<table name="application" phpName="Application">
   <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
   <column name="name" type="varchar" required="true" primaryString="true" />
   <behavior name="timestampable" />
</table>
<table name="application_iphone" phpName="IphoneApplication">
   <column name="store_id" type="varchar" required="true" />
   <behavior name="concrete_inheritance">
       <parameter name="extends" value="application" />
   </behavior>
</table>
<table name="application_identifier" phpName="IphoneApplicationIdentifier">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
    <column name="application_id" required="true" type="integer" />
    <column name="identifier" type="varchar" required="true" primaryString="true" />
    <foreign-key foreignTable="application_iphone">
        <reference local="application_id" foreign="id" />                                 
    </foreign-key>     
</table>

模型正确生成。当我尝试加载以下灯具时,会出现此问题:

AcmeMyBundleModelApplication:
    first_app:
        name: "MyFirstApp"
        descendant_class: "IphoneApplication"
AcmeMyBundleModelIphoneApplication:
    first_app_iphone:
        id: first_app
        store_id: 2342
AcmeMyBundleModelIphoneApplicationIdentifier:     
    first_app_identifier:
        identifier: "com.acme.myfirstapp.appstore"
        application_id: first_app_iphone

发生以下错误:

[推进]例外
无法插入自动递增主键的值 (application.ID)

我添加了两次"first_app"应用程序(一次在应用程序中,另一次在Iphone应用程序中),以防止我的Iphone应用程序标识符夹具出现另一个问题:

[推进] 异常 类中的对象"first_app" "Acme\MyBundle\Model\Application"未在数据文件中定义。

如何插入混凝土继承模型的夹具?

Propel 告诉您正在尝试为自动增量列设置值,这是由于

    id: first_app

线。

如果我理解正确,您只想添加一个 iPhone 应用程序项目,对吗?如果是这种情况,您只需要执行以下操作:

AcmeMyBundleModelIphoneApplication:
    first_app_iphone:
        name: "MyFirstApp"
        store_id: 2342

我遇到了类似的情况,最终拥有不同的架构文件。为了测试一个 - 我从架构中删除了自动增量并定义了另一个存储模型的位置。那是很久以前的事了,但一般步骤如下:


  1. 用于生产环境的自卸夹具

    app/console propel:fixtures:dump
    
  2. 构建测试数据库所需的一切

    app/console propel:database:create --env=test
    app/console propel:sql:build --env=test
    app/console propel:sql:insert --force --env=test
    app/console propel:model:build --env=test
    
  3. 将夹具导入测试数据库

    app/console propel:fixtures:load --env=test
    

请注意,命令可能因 Propel 版本而异

我通过详细解释我的问题发现了错误。问题不是来自此灯具文件。我所犯的错误对我来说似乎很奇怪。为什么错误提到*first_app*而不是*iphone_first_app*?

在挖掘其他灯具文件后,我发现了一个被遗忘的对 *first_app* 的引用。解决方案很简单(如卡洛斯·格拉纳多斯所述):

AcmeMyBundleModelIphoneApplication:
    first_app_iphone:
        name: "My first app"
        store_id: 2342
AcmeMyBundleModelIphoneApplicationIdentifier:     
    first_app_identifier:
        identifier: "com.acme.myfirstapp.appstore"
        application_id: first_app_iphone

无需定义基类。 :)

相关内容

  • 没有找到相关文章

最新更新