2016-01-12 1 views
0

J'ai un à un modèle de relation sur ma base de données. Par exemple, une propriété a plus d'un prix:Comment supprimer une collection (relation un à plusieurs) dans Propel?

property 1 => $200, $300 
property 2 => $200, $350 
etc. 

Cette façon de créer des biens:

$prices = array(); 
$property = new Property(); 
$property->setName('property 3'); 

$data_prices = array(200,300,400); 
foreach ($data_prices as $price { 
    $prc = new Price(); 
    $prc->setPrice($price); 
    $prices[] = $prc; #object collection 
} 
$property->setPrices($prices); 
$property->save(); 
#codes above create new records on table property and prices (related) and property id = 1 

Mais lorsque je tente de mettre à jour:

$prices = array(); 
$property = PropertyQuery::create()->findOneByPropertyId(1); 
#create new prices 
$data_prices = array(10,20,30); 
    foreach ($data_prices as $price) { 
     $prc = new Price(); 
     $prc->setPrice($price); 
     $prices[] = $prc; #object collection 
    } 
$property->setPrices($prices); 
$property->save(); 

au lieu de supprimer ancien prix enregistre ou les met à jour, Propel crée de nouveaux enregistrements. Je veux supprimer les anciens enregistrements de prix parce que je n'en ai pas besoin, ou, si je peux mettre à jour l'ancien avec le nouveau prix, ce serait génial.

Comment faire ceci dans Propel?

Répondre

1

Déclarer les objets prix comme neuf fait juste cela-crée de nouveaux objets prix. Vous devez appeler les objets Price de l'objet Property ou charger les objets Price dans votre boucle foreach. Comme je ne connais pas la structure de votre tableau des prix, je ne peux que vous donner l'ancienne solution:

$prices = array(); 
$property = PropertyQuery::create()->findOneByPropertyId(1); 
$prices = $property->getPrices(); 
$data_prices = array(10,20,30); 
for ($i = 0; $i < count($data_prices); $i++) { 
    if (!isset($prices[$i])) { 
     $prc = new Price(); 
     $prc->setPrice($price); 
     $prc->save(); 
     $prices[] = $prc; 
    } else { 
     $prc = $prices[$i]; 
     $prc->setPrice($data_prices[$i]); 
     $prc->save(); 
    } 
} 
$property->save();