本文主要為大家介紹關於Yii 2中的load()和save()的相關資料,文中透過範例程式碼介紹的非常詳細,對大家學習或使用yii2具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧,希望能幫助大家。
前言
本文主要介紹給大家的是Yii2中load()和save()的相關內容,分享出來供大家參考學習,話不多說,來一起看看詳細的介紹吧。
我這裡用的資料庫是mongo 資料庫為栗子:
#public function load($data, $formName = null)
{
$scope = $formName === null ? $this->formName() : $formName; //调用load 一般我是 $test = new test() $test->load('参数1','参数2')
// 参数1 一般是post get 传过来的参数 第二个参数 是一个空字符串 '';
// $this->formName() 返回的额是 你实例化的类的名字 new test() 最后返回的是test
if ($scope === '' && !empty($data)) {
$this->setAttributes($data); //进入
return true;
} elseif (isset($data[$scope])) {
$this->setAttributes($data[$scope]);
return true;
} else {
return false;
}
}
方法中對應的就是表格欄位。
在之後執行的是foreache循環 這裡的$this 是那個$test 這個物件對象去呼叫
public function setAttributes($values, $safeOnly = true) { if (is_array($values)) { $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes()); //这里执行的是$this->safeAttributes()方法,该方法返回的是当前场景下需要验证的字段。最后$attributes打印下来看下图 foreach ($values as $name => $value) { if (isset($attributes[$name])) { $this->$name = $value; } elseif ($safeOnly) { $this->onUnsafeAttribute($name, $value); } } } }
所以這個load()方法只是分配post 或get 發過來的數據,不做驗證。
#檢視save方法 。
//例如post 提交过来的数据是这样
$post=[
'a'=>123456,
'b'=>'abcdef'
]
$test->a=123456
$test->b='abcdef'
public function save($runValidation = true, $attributeNames = null)
{
if ($this->getIsNewRecord()) { //判断是否是新纪录
return $this->insert($runValidation, $attributeNames); //执行这里 之后$this代表的是test 这个模型表。
//test 继承的是\yii\mongodb\ActiveRecord 查看insert() 方法 。
} else {
return $this->update($runValidation, $attributeNames) !== false; }
}
public function insert($runValidation = true, $attributes = null)
{
if ($runValidation && !$this->validate($attributes)) { //下面的代码分析validate方法 验证rules
return false;
}
$result = $this->insertInternal($attributes); //保存数据
return $result;
}
相關推薦:
以上是Yii2中的load()和save()詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!