2016-06-13 39 views
0

In meiner Datenbank user_group Tabelle UNIQUE_KEY besteht aus zwei Spalten, user_id und user_group_id. Dies ist, wie es in Propel Schema aussieht:Propel Validierung für eindeutige Schlüsselpaar

<unique name="UNIQUE_KEY"> 
      <unique-column name="user_id"/> 
      <unique-column name="user_group_id"/> 
</unique> 

Wenn es um eine Spalte ist, dann können Sie Validierungsverhalten wie im Folgenden beschrieben:

<behavior name="validate"> 
    <parameter name="rule1" 
    value="{column: column_name, validator: Unique, options {message:Your validation message here.}}"/> 
</behavior> 

Also, was ich wollte, ist wissen, wie einzigartig zu setzen Validierung für Schlüsselpaar user_id und user_group_id. Gibt es eine Möglichkeit, ein Array von column_names übergeben? Irgendwelche Vorschläge werden nennenswert sein. Vielen Dank .

Antwort

1

Ich könnte falsch liegen, aber ich denke nicht, dass diese Funktionen noch nicht verfügbar ist.

Sie haben ein paar Möglichkeiten:

1. Behandeln Sie die Duplikate selbst:

// First check for a duplicate 
$duplicates = TableAQuery::create() 
    ->filterByKey1($key1) 
    ->filterByKey2($key2) 
    ->count(); 

if ($duplicates>0) { 
    throw new \PropelException('Row already exists'); 
} 
// No duplicate, add the new row 

2. Gehen Sie mit dem zugrunde liegenden duplizieren INSERT INTO Verletzung der Datenbanken über try-catch:

try{ 
    $obj->save(); 
} catch (PropelException $e) { 
    if (stripos($e->getMessage(), ' duplicate key ') !== false) { 
     throw new \PropelException('Row already exists'); 
    } 
} 

Option 2 könnte weniger schmerzhaft sein l Wenn die Leistung ein Problem darstellt, weil Sie dadurch eine Abfrage speichern, aber Ihr auto_increment möglicherweise erhöhen kann (va. auf MySQL), wenn es nicht konfiguriert wurde, doppelte Einfügungen zu ignorieren.