关系,crud silex和推进orm


relationships, crud silex and propel orm

我正在我的应用程序上尝试一些新的东西,因为我以前的做法并不是最好的,有可能在货币表中无休止地重复货币,这不是我未来真正想要的(考虑可扩展性和未来增长)。

所以我继续阅读,在ORM Cheatsheet中阅读了文档,得到了很多(不完全是我想要的,但没关系,因为它再次考虑了可扩展性和未来增长)

<xml>
<table name="countries">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="name" type="VARCHAR" size="128" required="true" />
    <column name="country_code" phpName="CountryCode" type="VARCHAR" size="7" required="true" />
    <column name="status" phpName="Status" type="BOOLEAN" required="true" defaultValue="false" />
    <unique name="IX_UQ_banks_id">
        <unique-column name="id"/>
    </unique>
    <unique name="IX_UQ_currencies_id">
        <unique-column name="id"/>
    </unique>
    <behavior name="timestampable" />
    <behavior name="soft_delete" />
    <behavior name="versionable" />
</table>
<table name="currencies">
    <column name="id" type="INTEGER" required="true" primaryKey="true" autoIncrement="true" />
    <column name="name" phpName="Name" type="VARCHAR" size="128" required="true" />
    <column name="code" phpName="Code" type="VARCHAR" size="7" required="true" />
    <column name="symbol" phpName="Symbol" type="VARCHAR" size="12" required="true" />
    <unique name="IX_UQ_countries_id">
        <unique-column name="id"/>
    </unique>
    <behavior name="timestampable" />
    <behavior name="soft_delete" />
</table>
<table name="country_has_currency" isCrossRef="true">
    <column name="countries_id" type="INTEGER" required="true" primaryKey="true" />
    <column name="currencies_id" type="INTEGER" required="true" primaryKey="true" />
    <foreign-key
        foreignTable="countries"
        defaultJoin="Criteria::LEFT_JOIN"
        onDelete="setnull"
        onUpdate="cascade"
        phpName="Countries">
        <reference local="countries_id" foreign="id" />
    </foreign-key>
    <foreign-key
        foreignTable="currencies"
        defaultJoin="Criteria::INNER_JOIN"
        onDelete="setnull"
        onUpdate="cascade">
        <reference local="currencies_id" foreign="id" />
    </foreign-key>
</table>

```

插入新记录后,我似乎找不到保存这些对象的正确方法。由于我正在编写的代码,我可以使用symfony2的Intl组件获得一个国家的货币(im使用silex tho),所以问题出现在这里:

添加新的国家/地区,获取货币,检查货币是否存在,如果存在,则创建与现有货币和新国家/地区的关系,如果不存在,则插入新的国家和新的货币。

得到了。

<!-- language: php -->
$country = new Countries();
$country->setName($data['country_name']);
$country->setCountryCode($data['country_code']);
$country->setStatus($data['country_status']);
$currency = new Currencies();
$currency->setName($data['currency_name']);
$currency->setCode($data['currency_code']);
$currency->setSymbol($data['currency_symbol']);
$country->addCurrencies($currency);
$country->save();