2015-01-06 6 views
9

Voglio verificare se il categoryid indicato è una categoria esistente. Ho provato diversi valori come attributo target, ma non riesco a farlo funzionare finora.Regole del modello Yii2, come usare un altro tavolo durante l'utilizzo?

Quando eseguo la query così com'è, restituisce il valore corretto per ciò che sto cercando di aggiungere.

public function rules() 
{ 
    return [ 
     [['categoryid'], 'integer'],  
     ['categoryid', 'exist', 'targetAttribute' => FaqCategory::findOne(['id=:id', ['id'=>'categoryid']])['id']], 
     [['question', 'answer'], 'required'], 
     [['answer'], 'string'], 
     [['question'], 'string', 'max' => 255] 
    ]; 
} 
  • Aggiornamento

sono incappato in targetClass. Tuttavia questa volta ricevo la classe 'FaqCategory' non trovata. La classe si trova nello stesso spazio dei nomi.

['categoryid', 'exist', 'targetClass' => 'FaqCategory'] 

risposta

14

è necessario utilizzare il nome della classe con namespace, dovrebbe essere qualcosa di simile:

['categoryid', 'exist', 'targetClass' => '\app\models\FaqCategory'] 

O

['categoryid', 'exist', 'targetClass' => FaqCategory::className()] 

http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#exist

+0

Questo mi ha aiutato a risolvere il problema! Ha pubblicato la risposta. Non sono sicuro di quale io sia più affezionato. Uno è migliore in termini di regolamenti di codice? – Wijnand

8

avuto la risposta grazie a soju. Bastava aggiungere il targetAttribute per confrontare il categoryid con l'id della categoria.

['categoryid', 'exist', 'targetClass' => '\app\models\FaqCategory', 'targetAttribute' => 'id'], 
Problemi correlati