2015-01-06 13 views
9

Tôi muốn kiểm tra xem danh mục được cung cấp có phải là danh mục hiện có hay không. Tôi đã thử một số giá trị như là thuộc tính đích, nhưng tôi không thể làm cho nó hoạt động cho đến nay.Quy tắc mô hình Yii2, cách sử dụng bảng khác khi sử dụng?

Khi tôi thực hiện truy vấn, nó trả về giá trị chính xác cho những gì tôi đang cố thêm.

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] 
    ]; 
} 
  • Cập nhật

tôi stumbled khi targetClass. Tuy nhiên, lần này tôi không nhận được lớp 'FaqCategory'. Lớp được tìm thấy trong cùng một không gian tên.

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

Trả lời

14

Bạn phải sử dụng tên lớp với không gian tên, nó phải là một cái gì đó như:

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

Hoặc

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

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

+0

Điều này đã giúp tôi khắc phục sự cố! Đã đăng câu trả lời. Không chắc tôi thích cái nào hơn. Là một trong những tốt hơn về quy định mã? – Wijnand

8

Got câu trả lời nhờ soju. Chỉ cần thêm thuộc tính targetAttribute để so sánh categoryid với id của category.

['categoryid', 'exist', 'targetClass' => '\app\models\FaqCategory', 'targetAttribute' => 'id'], 
Các vấn đề liên quan