2016-05-13 2 views
0

J'essaie quelque chose de nouveau sur mon application, comme la façon dont je le faisais auparavant n'était pas vraiment optimale, il était possible de répéter les devises sans fin dans la table des devises, ce qui n'est pas vraiment ce que je vouloir dans le futur (penser à l'évolutivité et à la croissance future).relations, crud silex et propel orm

Alors je suis allé de l'avant, et la lecture de la documentation et ORM Cheatsheet a obtenu un grand nombre à plusieurs (pas exactement ce que je veux, mais son ok, car il fonctionne à penser à nouveau l'évolutivité et la croissance future)

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

`` `

Ce que je ne peux pas sembler trouver est la manière appropriée d'enregistrer ces objets une fois que j'insère de nouveaux dossiers. en raison du code que j'écris, je peux obtenir la monnaie d'un pays utilise le composant Intl de symfony2 (im en utilisant silex tho), donc le problème se pose ici:

Ajouter un nouveau pays, obtenir une monnaie, vérifier si monnaie existe, si oui, créer une relation avec la monnaie existante et le nouveau pays, s'il n'existe pas, insérer à la fois le nouveau pays et la nouvelle monnaie.

Répondre

0

l'a obtenu.

<!-- 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();