首頁  >  文章  >  後端開發  >  Yii2中的load()和save()詳解

Yii2中的load()和save()詳解

小云云
小云云原創
2018-01-30 13:58:533459瀏覽

本文主要為大家介紹關於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;
  }
 }
圖: 圖1的檔名是test  實例化後面是$test 物件 

public function attribues()

方法中對應的就是表格欄位。

我這裡沒有用場景  所以暫時不講解場景這個功能。 不過大家可以看手冊。很容易懂。

這兩張圖是對對應的

在之後執行的是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();

#檢視save方法 。

//例如post 提交过来的数据是这样

$post=[

'a'=>123456,

'b'=>'abcdef'

] 

$test->a=123456

$test->b='abcdef'

insert() 方法中


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;
 }
此時資料驗證完畢,之後就儲存資料保存資料這塊就暫時不寫了後續補上。

相關推薦:

jQuery.load()和Jsp的include的區別詳解


jquery中ajax應用之load()函數的實例詳解

jQuery的HTML()與Load()的差異#

以上是Yii2中的load()和save()詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn