<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] 這里不介紹TP本身的一些方法了,都是基于(繼承)TP的,所以該怎么用還是怎么用,自行查閱TP官方文檔。 ## `get_model_name` 助手函數 獲取某個模型的命名空間+名稱 ~~~ /** * 獲取某個模型的命名空間+名稱 * @param string $model * @param string $app * @return string 如果模型 返回模型命名空間+名稱 否則返回 空字符串 */ function get_model_name(string $model, string $app = '') ~~~ ~~~ var_dump(get_model_name('Admin'));// string(22) "app\common\model\Admin" var_dump(get_model_name('cms.Document'));// string(29) "app\common\model\cms\Document" var_dump(get_model_name('Field'));// string(22) "woo\common\model\Field" var_dump(get_model_name('Xixi'));// string(0) "" ~~~ 注意它不是模型方法,是一個助手函數;它會根據系統中模型的結構,自動識別定位到模型的位置,并返回該位置(命名空間),如果不存在返回空字符串。你也可以用它判斷一個模型是否存在。 ## `model` 助手函數 實例化一個模型對象 ~~~ /** * 實例化一個模型對象 * @param string $model * @param string $app * @param bool $force 強制實例一個新對象 * @return mixed|object|\think\App * @throws Exception */ function model($model, string $app = '', bool $force = false) ~~~ 它先通過`get_model_name`定義到模型的命名空間,再做實例化;如果模型不存在會拋出一個異常;當你不確定你要實例的模型是否存在的時候可以先通過`get_model_name`判斷下。 ~~~ $admin = model('Admin'); $admin1 = model('Admin'); var_dump($admin === $admin1);//bool(true) 說明調用多次是同一個實例(單例) 它是通過TP容器進行處理的 $admin2 = model('Admin', '', true);// 強制實例 var_dump($admin === $admin2);//bool(false) 說明重新實例了另外一個對象 ~~~ ~~~ // 不確定是否存在的時候 if (get_model_name('Admin')) { $admin = model('Admin');// 如果有這個模型才實例 免得報錯 // ... } ~~~ ~~~ $list = model('Admin')->where([])->field(true)->select(); $list = \app\common\model\Admin::where([])->field(true)->select(); $list = (new \app\common\model\Admin)->where([])->field(true)->select(); ~~~ 上面幾個查詢效果一樣的,通過`model`實例可能免去了你定位命名空間的麻煩。 ## `afterStart` 開發者的初始化方法 ~~~ protected function afterStart() {} ~~~ 每次實例都會執行,用于開發者定義模型實例就需要立即執行的代碼。 這個方法可能會用得比較多,在每個自動生成的模型trait文件中,都有它。 你可以里面對form、tableTab等屬性進行動態賦值和定義。 ## `getDefaultOrder` 獲取到當前模型的默認排序方式 ~~~ public function getDefaultOrder() ~~~ ~~~ $admin = model('Admin'); $list = $admin->order($admin->getDefaultOrder())->select(); ~~~ ## CURD封裝 關于添加、修改、刪除、查詢、分頁等;你可以直接參考TP文檔,使用TP原本的方法進行操作。這里只是系統運用TP的原方法再做了一些封裝而已。 封裝的源碼文件:`woo\common\model\traits\Curd.php`,有可能你會閱讀源碼,特別是分頁。 ### `createData` 添加數據 ~~~ /** * 寫入數據 * @param array $data 寫入數據 * @param array $options 選項 * @return bool 失敗返回false 成功返回主鍵值 */ public function createData(array $data, array $options = []) ~~~ ~~~ $admin = model('Admin'); $result = $admin->createData([ 'username' => 'test123', 'password' => 'test123' ]); var_dump($result);// bool(false) 失敗了 因為模型中自動驗證了 if ($result) { // 添加成功 } else { // 添加失敗 pr($admin->getError());// 獲取到失敗原因 } ~~~ ~~~ $admin = model('Admin'); // 添加的時候 默認會自動驗證 如果不希望驗證就isValidate(false) $result = $admin->isValidate(false)->createData([ 'username' => 'test1234', 'password' => 'test1234', 'email' => '1234567@qq.com' ]); var_dump($result);// string(1) "2" 成功了 因為沒有做驗證了 獲取到自增id if ($result) { // 添加成功 // 你可以通過 模型對象 $admin獲取到更多數據 pr($admin->toArray()); } else { // 添加失敗 pr($admin->getError());// 獲取到失敗原因 } ~~~ ### `modifyData` 修改數據 ~~~ /** * 更新數據 * @param array $data 要更新的數據 * @param array $options 選項 * @return bool 失敗返回false 成功返回主鍵值 * 估計較多人會使用錯誤,必須自己先查詢以后再調用modifyData * eg. 比如要更新id為1的用戶信息,必須先自己查詢一次,再通過查詢返回的模型對象進行modifyData操作 沒法tp6就是這樣搞的 * $model = model('User')->find(1); * $model->modifyData($data); */ public function modifyData(array $data, array $options = []) ~~~ ~~~ // 必須先查下 獲取到數據模型對象(就是該模型中已經包含了數據,它已經對應上數據庫的一條數據了) $admin = model('Admin')->find(2); if ($admin) { // 如果不希望自動驗證:isValidate(false) $result = $admin->isValidate(false)->modifyData([ 'password' => '456798' ]); var_dump($result);// 失敗返回false 成功返回id值 if ($result) { //修改成功 } else { //修改失敗 獲取到錯誤原因 pr($admin->getError()); } } ~~~ ### `deleteData` 刪除數據 ~~~ /** * @param $id 需要刪除數據的主鍵值 可以是一個數字 也可以是數組刪除多個 * @param array $where 被刪除數據額外的條件 * @param bool $force 是否強行刪除 * @return array|bool 失敗返回false 成功返回數組(包含刪除的數據、刪除條數、成功刪除條數) */ public function deleteData($id, array $where = [], bool $force = false) ~~~ ### `restoreData` 恢復數據 ~~~ /** * 恢復數據 * @param $id 需要恢復的id 可以是數組 * @param array $where 額外的條件 * @return array|bool */ public function restoreData($id, array $where = []) ~~~ ### `getPage` 分頁查詢 ~~~ /** * 數據分頁 * @param array $options * @return array */ public function getPage(array $options = []) // $options 可以帶的參數 $options = [ 'where' => [], 'whereCallback' => '',//用于傳遞閉包 'order' => [], 'with' => [], 'withJoin' => [], 'whereOr' => [], 'whereColumn' => [], 'whereTime' => [], 'field' => true, 'limit' => 15, 'paginate' => [ // paginate 下可以帶的參數: list_rows 每頁數量 page 當前頁 path url路徑 query url額外參數 fragment url錨點 var_page 分頁變量 type 分頁類名 simple 簡潔分頁 total 總條數 ] ]; ~~~ ~~~ $pages = model('Admin')->getPage([ // where 傳遞條件 // order 傳遞排序 默認會自動識別 // with 傳遞關聯模型 // ... ]); pr($pages);// 包含了render:翻頁的html結構 page:翻頁統計 list:本頁列表數據 ~~~ ### `getNext` 獲取指定數據的下一條數據 ~~~ /** * 獲取下一條數據 * @param int $id * @param array $options * @return array */ public function getNext(int $id, array $options = []) ~~~ ### `getPrev` 獲取指定數據的上一條數據 ~~~ /** * 獲取上一條數據 * @param int $id * @param array $options * @return array */ public function getPrev(int $id, array $options = []) ~~~ ## `getParentModel` 獲取到當前模型的父模型 ~~~ $admin = model('Setting'); var_dump($admin->getParentModel());//string(12) "SettingGroup" ~~~ 模型中設置了`parentModel`屬性以后有效;否則返回false ## `getParentId` 獲取與父模型之間的關聯字段名 ~~~ $admin = model('Setting'); var_dump($admin->getParentId());//string(16) "setting_group_id" ~~~ 模型中設置了`parentModel`屬性以后有效;否則返回null ## `forceError` 給模型加注錯誤信息 ~~~ $admin = model('Admin'); $admin->forceError('username', '用戶名錯誤'); $admin->forceError([ 'password' => '密碼錯誤', 'email' => '郵箱錯誤' ]); pr($admin->getError()); ~~~ ## `getError` 獲取模型中的錯誤信息 ## `selectField` 設置查詢的時候查詢的字段列表 ~~~ /** * 選擇查詢的字段列表 * @param bool $field true 全部字段 數組 自定字段 * @param array $except 排除的字段 如(true, ['a']) 表示除了a字段都要 * @return array */ public function selectField($field = true, array $except = []) ~~~ ~~~ $admin = model('Admin'); // $list = $admin->select();// 1、查詢所有字段 // $list = $admin->field(true)->select();// 2、查詢所有字段 // $list = $admin->field(['id', 'username', 'email' => 'youxiang'])->select();// 3、查詢指定字段 // $list = $admin->field($admin->selectField(true))->select(); // 等效2 // $list = $admin->field($admin->selectField(['id', 'username', 'email' => 'youxiang']))->select();// 等效3 $list = $admin->field($admin->selectField(true, ['password']))->select();// 除了password字段都查 ~~~ ## `isSoftDelete` 判斷當前模型是否是軟刪除 ## `checkParent` 無限極parent_id的一個自定義驗證方法 ~~~ /** * 父級ID 的驗證方法 'rule' => ['call', 'checkParent'] * @param $value * @param $rule * @param $data * @return bool|string */ public function checkParent($value, $rule, $data) ~~~ ![](https://img.kancloud.cn/df/c4/dfc4d71c42c0fb54e48b00359f4fe4c4_701x284.png) 建議做無限極模型的時候,給`parent_id`字段加上該方法的一個自定義驗證規則。 它可以驗證選擇的父id不能是本身或子id,以及最多級數 `$treeLevel`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看