yii2 使用 activerecord 规则将连接的字符串插入数据库
yii2 insert concatenated string into database with activerecord rules
我有一个表单,用户可以在其中选择一些选项,我想根据用户输入向数据库中插入一个附加的串联字段。我需要在 SCENARIO_CREATE 上完成(并更新)。例如:
type: A
size: 100
color: black
concatenated: A100black
我试过这样:
型号:
class Xyz extends BaseXyz {
const SCENARIO_CREATE = 'create';
public function rules() {
...
['concatenated', 'generateConcatenated', 'on' => self::SCENARIO_CREATE],
...
public function generateConcatenated() {
return $this->type . $this->size . $this->color;
}
控制器:
class XyzController extends base\XyzController {
public function actionCreate() {
$model = new Xyz;
$model->scenario = Xyz::SCENARIO_CREATE;
...
我也尝试过在规则中使用 'filter'
,但没有成功。也许我的做法是完全错误的,在规则上是做不到的?请指出正确的方向。非常感谢!
规则用于检查属性验证,但您也可以在规则中执行此操作:
public function generateConcatenated($attribute,$param) {
$this->concatenated = $this->type . $this->size . $this->color;
}
我认为实现此目的的最佳逻辑方法是从 rules
中删除属性并覆盖模型中的 beforeSave()
:
public function beforeSave($insert)
{
$this->concatenated = $this->type . $this->size . $this->color;
return parent::beforeSave($insert);
}
你应该考虑到 yii 对新记录有默认的 insert
场景,对现有记录有默认的 update
场景。
我有一个表单,用户可以在其中选择一些选项,我想根据用户输入向数据库中插入一个附加的串联字段。我需要在 SCENARIO_CREATE 上完成(并更新)。例如:
type: A
size: 100
color: black
concatenated: A100black
我试过这样:
型号:
class Xyz extends BaseXyz {
const SCENARIO_CREATE = 'create';
public function rules() {
...
['concatenated', 'generateConcatenated', 'on' => self::SCENARIO_CREATE],
...
public function generateConcatenated() {
return $this->type . $this->size . $this->color;
}
控制器:
class XyzController extends base\XyzController {
public function actionCreate() {
$model = new Xyz;
$model->scenario = Xyz::SCENARIO_CREATE;
...
我也尝试过在规则中使用 'filter'
,但没有成功。也许我的做法是完全错误的,在规则上是做不到的?请指出正确的方向。非常感谢!
规则用于检查属性验证,但您也可以在规则中执行此操作:
public function generateConcatenated($attribute,$param) {
$this->concatenated = $this->type . $this->size . $this->color;
}
我认为实现此目的的最佳逻辑方法是从 rules
中删除属性并覆盖模型中的 beforeSave()
:
public function beforeSave($insert)
{
$this->concatenated = $this->type . $this->size . $this->color;
return parent::beforeSave($insert);
}
你应该考虑到 yii 对新记录有默认的 insert
场景,对现有记录有默认的 update
场景。