推动多种行为(例如,i18n&& versionable)

时间:2013-05-28 13:32:21

标签: php propel behavior

我正在试用Propel,看看它对我的项目是否可以接受。

组合多个行为时,某种行为不会继承其他行为。

示例schema.xml:

<table name="item" phpName="Item">
    <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
    <column name="name" type="varchar" size="255" required="true" />

    <behavior name="sluggable" />

    <behavior name="sortable" />

    <behavior name="i18n">
        <parameter name="i18n_columns" value="name" />
    </behavior>

    <behavior name="versionable">
        <parameter name="log_created_at" value="true" />
        <parameter name="log_created_by" value="true" />
        <parameter name="log_comment" value="true" />
    </behavior>
</table>

示例控制器:

// create example records
$item = new Item();

// create version with i18n record
$item->setLocale('en_US');
$item->setName('Hello');
$item->save();

// create version with i18n record
$item->setLocale('is_IS');
$item->setName('World');
$item->save();

// get created newly created item
$item = ItemQuery::create()
  ->findPK(1);

foreach ($item->getAllVersions() as $itemVersion)
{
    echo 'us name: ' . $itemVersion->setLocale('en_US')->getName() . "\n";

    echo 'is name: ' . $itemVersion->setLocale('is_IS')->getName() . "\n";
}

这会抛出错误,即方法 setLocale()不存在,因为我们位于“BaseItemVersion.php”类中,该类没有任何BaseItemI18n.php方法。

有什么方法可以解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:0)

http://propelorm.org/behaviors/versionable.html

  

只有简单的外键才能对相关对象进行版本控制。基于复合外键的关系现在无法保留关系版本。

由于i18n添加了复杂的外键,因此两者不能一起使用。