在 Yii2 中,exist(存在性)的验证规则编写后生成的 SQL 不符合预期
1、在 Yii2 中,exist(存在性)的验证规则编写后生成的 SQL 不符合预期。如图1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * {@inheritdoc} */ public function rules() { return [ [[ 'survey_from_id' ], 'exist' , 'targetAttribute' => 'id' , 'targetRelation' => 'survey_form' , 'filter' => [ 'user_id' => Yii:: $app ->user->id], 'on' => self::SCENARIO_CREATE], ]; } public function getSurvey_form() { return $this ->hasOne(SurveyForm:: class , [ 'id' => 'survey_form_id' ]); } |
1 | SELECT EXISTS( SELECT * FROM `survey_forms` WHERE (`user_id`= '1825203750689422' ) AND (0=1)) |
2、放弃使用 targetRelation,转而使用 targetClass 与 targetAttribute。生成 SQL 符合预期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * {@inheritdoc} */ public function rules() { return [ [[ 'survey_from_id' ], 'exist' , 'targetClass' => SurveyForm:: class , 'targetAttribute' => [ 'survey_from_id' => 'id' ], 'filter' => [ 'user_id' => Yii:: $app ->user->id], 'on' => self::SCENARIO_CREATE], ]; } public function getSurvey_form() { return $this ->hasOne(SurveyForm:: class , [ 'id' => 'survey_form_id' ]); } |
1 | SELECT EXISTS( SELECT * FROM `survey_forms` WHERE (`survey_forms`.`id`= '1825203750689574' ) AND (`user_id`= '1825203750689422' )) |
近期评论