올바른 방법은 스키마의 유효성 검사기를 사용하고 코드에서 validate()
메서드를 사용하여 검사하는 것입니다.
class User extends BaseUser {
...
public function preSave(PropelPDO $con = null) {
// does the object pass all validations?
if (!$this->validate()) {
$errors = array();
// something failed, go through each failure and capture message:
foreach ($this->getValidationFailures() as $failure) {
$errors[] = $failure->getMessage();
}
// throwing an Exception will stop the save() from occurring
throw new InvalidArgumentException(implode("||", $errors));
}
return true; // if you get here, go ahead and save
}
}
스크립트에서 당신과 같이 save()
를 부를 것이다 : :
...
$user = new User();
try {
// try to save (could fail)
$user->save();
} catch (InvalidArgumentException $e) {
// we have errors, split the exception message to get each one separately
$errorMessages = preg_split(/\|\|/, $e->getMessage());
// handle the messages however you need to
}
에 대한 추가 읽기
<database ...>
<table ...>
<!-- the "required" attribute here only sets the DB property -->
<column name="email" type="varchar" required="true" />
...
<!-- Adds the unique index in the DB (but nothing in PHP code!) -->
<unique>
<unique-column name="email" />
</Unique>
...
<validator column="email">
<!-- this validator rule makes the $obj->validate() method fail on null -->
<rule name="required" message="The email is required!" />
<!-- this validator rule makes the $obj->validate() method fail on empty string -->
<rule name="minLength" value="1" message="The email cannot be blank!" />
<!-- you could add a regular expression to only match email addresses here -->
<rule name="match" value="/regular expression/" message="Please enter a valid email address!" />
<!-- adds a validation that the field is unique before trying to update DB -->
<rule name="unique" message="That email address is not unique!" />
</validator>
</table>
</database>
이 그런 다음
preSave()
코드에서이 같은 일을 할 수 있습니다 : 다음은 그 예이다
Validators in the Propel documentation.
NULL 값을 가져올 열은 무엇입니까? – likeitlikeit
아니요 열 :-) 그게 핵심입니다. 이 경우에'email' 칼럼이 명시 적으로 설정되어 있지 않다면 Propel에 의한 INSERT 질의 executen의 일부가되어서는 안된다. – vestol
SQL 제약 조건 위반으로 이어질 것이라는 점을 알고 있습니까? – likeitlikeit