отношения, crud silex и propel orm

Я пробую что-то новое в своем приложении, так как то, как я это делал раньше, было не совсем оптимальным, можно было бесконечно повторять валюты в таблице валют, а это не то, чего я действительно хочу в будущем (думая о масштабируемости и будущем рост).

Итак, я пошел дальше и прочитал документацию и в памятке по ORM получил много-ко-многим (не совсем то, что я хочу, но это нормально, так как он снова работает, думая о масштабируемости и будущем росте)

<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>

```

Кажется, я не могу найти правильный способ сохранить эти объекты после вставки новых записей. из-за кода, который я пишу, я могу получить валюту страны, используя компонент Intl symfony2 (хотя я использую silex), поэтому здесь возникает проблема:

Добавить новую страну, получить валюту, проверить, существует ли валюта, если да, создать связь с существующей валютой и новой страной, если она не существует, вставить и новую страну, и новую валюту.


person JLChafardet    schedule 13.05.2016    source источник


Ответы (1)


понятно.

<!-- 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();
person JLChafardet    schedule 13.05.2016