在 Yii2 中,exist(存在性)的验证规则编写后生成的 SQL 不符合预期
1、在 Yii2 中,exist(存在性)的验证规则编写后生成的 SQL 不符合预期。如图1
/** * {@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']); }
SELECT EXISTS(SELECT * FROM `survey_forms` WHERE (`user_id`='1825203750689422') AND (0=1))
2、放弃使用 targetRelation,转而使用 targetClass 与 targetAttribute。生成 SQL 符合预期。
/** * {@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']); }
SELECT EXISTS(SELECT * FROM `survey_forms` WHERE (`survey_forms`.`id`='1825203750689574') AND (`user_id`='1825203750689422'))
近期评论