Yii2模型规则,如何在使用时使用另一个表存在?

Wij*_*and 9 php yii2

我想检查给出的categoryid是否是现有类别.我已经尝试了几个值作为目标属性,但到目前为止我无法使它工作.

当我按原样执行查询时,它返回我正在尝试添加的正确值.

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]
    ];
}
Run Code Online (Sandbox Code Playgroud)
  • 更新

我偶然发现了targetClass.然而这次我收到了未找到的Class'FaqCategory'.可以在同一名称空间下找到类.

 ['categoryid', 'exist', 'targetClass' => 'FaqCategory'] 
Run Code Online (Sandbox Code Playgroud)

soj*_*oju 14

你必须使用带有命名空间的类名,它应该是这样的:

['categoryid', 'exist', 'targetClass' => '\app\models\FaqCategory'] 
Run Code Online (Sandbox Code Playgroud)

要么

['categoryid', 'exist', 'targetClass' => FaqCategory::className()] 
Run Code Online (Sandbox Code Playgroud)

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


Wij*_*and 8

得益于烧酒的答案.只需添加targetAttribute即可将categoryid与类别的id进行比较.

['categoryid', 'exist', 'targetClass' => '\app\models\FaqCategory', 'targetAttribute' => 'id'],
Run Code Online (Sandbox Code Playgroud)