2016-05-13 3 views
0

Я пытаюсь что-то новое в своем приложении, поскольку способ, которым я это делал раньше, не был действительно оптимальным, можно было бесконечно повторять валюты в валютной таблице, что не то, что я действительно хотят в будущем (думая о масштабируемости и будущем росте).отношения, crud silex и 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> 

`` `

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

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

ответ

0

получил его.

<!-- 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(); 
Смежные вопросы