<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                DMP將數據與數據庫操作分離,使得開發人員只需要專注于數據的變化,而不需要去考慮數據如何與數據庫進行交互。**各功能包管理自己的邏輯層。** logic類分為兩大塊:**敏捷方法**和**事件方法**。 **敏捷方法**,可用于controller或者其他logic類調用的public、protected方法。它們已經集成了常規的一些操作。很多時候常規操作并不能滿足我們的需求,畢竟是邏輯層,需要的就是對基本數據的加工處理。那么這個時候我們就需要用到logic類的另一塊內容了:事件方法。 **事件方法**,對于每一個敏捷方法,都包含有至少一個的事件方法。它們都是protected方法,使用方法是直接重載他們。事件方法的優勢在于,你不需要在意操作的過程,而將注意力集中額外的處理數據的變化上。比如在添加之前需要設置一些默認數據,那么只需要在get敏捷方法的事件方法onGetAfter($item)中,對$item進行設置即可: ``` protected function onAddBefore(&$item): bool { $item["enable"] = true; } ``` > 邏輯層位置:應用目錄/logic/功能塊名/邏輯類 繼承基本類framework\core\driver\Logic,它是一個抽象類,需要實現以下方法: * **modelClassPath(): ?array** 返回當前邏輯使用的model類路徑。敏捷方法都通過這個方法獲得model實例進行操作。 ## 敏捷方法: * **getStatement(): array** 邏輯申明,詳細內容請查看下一級內容《邏輯申明》。 * **getSearchOperationFilter(): array** 指定查詢操作符,**未指定的參數將無法篩選**,如果有外鍵關聯查詢,可通過.方式指定,比如:`"usertype.name"=>"="`,重載此方法,并返回一個數組。return一個鍵值對數組,字段名以及對應操作符。如:["title"=>"like"],如: ``` protected function getSearchOperationFilter() { return [ "name" => "like", "description" => "like", "parent_string" => "like%", "id"=>function($paramName,$value){return ["id","in",[1,2,3]];} //可以直接通過回調函數返回一個where數組或者字符串。 //id鍵值表示當查詢中包含id字段時將會觸發此條件。 ]; } ``` * **getFailMessage()** 獲取失敗信息,獲取一次后該信息會失效。 * **protected function setFailMessage($message)** 設置失敗消息。當logic內部發生錯誤時,用此方法將失敗內容進行提示,此方法不影響返回結果,該return false的,還是要自己寫。 * **protected function fail($message)** 操作失敗的方法,當logic內部發生錯誤時,用此方法將失敗內容進行提示,與setFailMessage($message)不同的是,這個方法會返回fanlse,可以在操作過程中直接return此方法。 * **get($pk, $field = "*")** 獲取主體數據,返回的值為modelClassPath()方法指定的主體model返回記錄。$pk參數指的標識值,不一定就是表里面的id值。指定標識列在model里設置$pk='openid'。支持事件:onGetBefore($pk, $model),onGetAfter(?array &$item),支持申明內容,已集成消息隊列。 * **getRecord($pk, $field)** 獲取數據記錄請求的響應邏輯。這個方法可以用來返回數據庫的記錄數據。返回帶關聯數據等的情況建議通過get方法響應。支持事件:onGetRecordBefore($pk, $model),onGetRecordAfter($item),支持申明內容,集成消息隊列。 * **add($item)** 數據添加操作,返回值是新添加數據的標識序列,這個標識序列不一定是表里的id列。指定標識列在model里設置$pk='openid'。額外數據操作,在事件方法里設置。 * **addAll(array $items)** 批量添加信息,一次性批量提交信息。它有一個對應的addAllBefore與addAllAfter事件,并支持申明內容。 * **edit($pk, $item)** 數據修改操作,返回值是編輯之后的操作結果或者它的后置操作事件onEditAfter所返回的內容,$pk參數指的標識值,不一定就是表里面的id值。指定標識列在model里設置$pk='openid',在此過程中,如果提供的id值沒有對應的記錄,則會返回false,并有fail消息"未找到記錄"。額外數據操作,在事件方法里設置。 * **updateAll(array $pkAndValue)** 批量更新數據,根據鍵值對進行批量修改,數組的鍵為標識值。暫未支持事件,未支持申明內容,支持消息隊列。 * **setEnable($pk, bool $enable)** 修改數據表enable字段。提供標識值與true或否。指定標識列在model里設置$pk='openid'。額外數據操作,在事件方法里設置。支持事件:onSetEnableAfter($result),支持申明內容,已集成消息隊列。 * **setOrderNumber(array $pkAndValue)** 設置排序場景的響應邏輯,提供一個包含鍵為標識值,值為排序值的數組即可更新數據。支持事件:onSetOrderNumber(bool $result, array $requestItems),暫沒有支持的申明內容,已集成消息隊列。 * **delete($pk)** 刪除數據,提供標識值,批量刪除提供一個標識值的數組,返回刪除主鍵與onDeleteAfter返回值的和。指定標識列在model里設置$pk='openid'。額外數據操作,在事件方法里設置。支持事件:onDeleteBefore、onDeleteAfter,支持申明內容,已集成消息隊列。 **deleteBatch(array $where)** 根據指定條件批量刪除數據,暫未支持事件,未支持申明內容,支持消息隊列。 * **getList(int $currentPage, $searchKeyAndValue = [], $order = "", $pageSize = 0, $field = "")** 分頁、查詢、排序場景響應方法。返回為數組:["data":數據列表,"total":總記錄數],控制層的doGetList調用的就是這個方法。支持事件:onGetListBefore(array $searchKeyAndValue),onGetListAfter(array &$list),支持申請內容,已集成消息隊列。 * **protected function convertSearchParams($searchParams, $operationFilter = [])** 查詢轉換,將查詢鍵值數組轉化成TP查詢器數組,這個方法一般不需要自己調用。 * **protected function getModelInstance($modelName = ""): \Think\Model** 獲取一個關聯model實例的對象。惰性獲取。使用時不需要用變量保存,可以直接用。 ## 事件方法: * **protected function onGetListBefore(int $currentPage = 1, array $searchKeyAndValue = [], $order = "", $pageSize = 0, $field = "*")** getList前置操作,提交數據庫查詢前的操作。 * **protected function onGetListAfter(array &$list)** GetList后置事件方法。注意:不要在這里刪除數據,否則可能與翻頁不匹配。如果需要刪除數據,建議在前置事件中操作或者刪除完后再查詢一遍。 * **protected function onGetAllListBefore(array $searchKeyAndValue,$order = "", $field = "*")** getAllList方法前置操作。提交數據庫之前拋出。 * **protected function onGetAllListAfter(array &$items)** GetAllList后置事件方法。注意:不要在這里刪除數據,否則可能與翻頁不匹配。 * **protected function onAddBefore( $item):bool** 數據添加前置操作,$item:準備添加的數據內容,如果返回false,則添加會取消。對添加內容的預設值、強制對值設定可以放在這個方法里進行。比如: ``` protected function onAddBefore($item) { $item["enable"] = 1; $item["create_info"] = json_encode(LoginState::getCreateInfo()); $parent = $this->get($item["parent_id"]); $item["parent_string"] = $parent["parent_string"] . $parent["id"] . ","; return $item; } ``` * **protected function onAddAfter(bool $addResult, array $addItem)** 數據添加的后置操作,$addResult:添加結果,如果為false表示添加失敗。$addItem:添加成功的數據行,addResult為false,此項則為空數組。 * **protected function onAddAllBefore(array &$items):bool** 批量添加的前置操作,同onAddBefore,只是在用來響應addAll方法。$items:準備添加的數據數組,這里是一個引用參數,修改會直接更改添加內容。 * **protected function onAddAllAfter(array $successPks, array $addItems)** 批量添加后置事件方法。同onAddAfter,只是在用來響應addAll方法。$successPks:添加成功的主鍵值。$addItems:之前準備添加的數據行,不管結果成功或者失敗都返回。 * **protected function onEditBefore($pk, $original, $item):array** 數據修改前置操作,$pk:請求更新的數據標識。$original:當前數據庫的原始數據。$item:準備修改的數據。 * **protected function onEditAfter($original, $result)** 數據修改后置操作,$original:修改成功前的原始數據。$result:修改成功的數據行。 * **protected function onGetBefore($id, framework\core\driver\Model &$modelInstance)** 獲取數據的前置操作,$id:標識值,指定標識列在model里設置$pk='openid'。$modelInstance:查詢實例,可以在這里直接利用TP的鏈式操作做查詢的改變。model的with操作等可以在這里設置。 * **protected function onGetAfter(?array &$item)** 獲取數據的后置操作,$items:準備返回的數據。父類對create_info與update_info進行json_decode,子類中使用parent::onGetAfter來使用。 * **protected function onDeleteBefore($pk, framework\core\driver\Model $modelInstance):bool** 數據刪除的前置操作,$pk:標識值,指定標識列在model里設置$pk='openid'。$modelInstance:查詢實例。返回true表示繼續刪除。返回false則取消操作,并會在消息隊列中添加一個消息。 * **protected function onDeleteAfter($pk, array $deletedItems)** 刪除操作后置事件方法。可用來在這里做關聯刪除或者寫入日志等操作。,$pk:主鍵,提供數組表示批量刪除。$deletedItems:已刪除數據清單。二維數組。 * **protected function onGetRecordBefore($pk, framework\core\driver\Model &$model)** get信息記錄前置操作。$pk:查詢標識。$model:model實例。 * **protected function onGetRecordAfter(?array &$item)** get信息后置操作。$items:獲取到的原始記錄。 * **protected function onSetEnableAfter($result)** SetEnable后置操作。$result:請求的setenable是否操作成功。 * **protected function onSetOrderNumber(bool $result, array $requestItems)** setOrderNumber后置方法。$result 操作結果。true為成功,false為失敗。$requestItems 請求設置數據,僅包含有id和ordernumber值。 ***** 另外設置有一個ApiLogic邏輯類,允許將這個邏輯類作為Api方式使用,某些模塊直接實例化將不受控制。
                  <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>

                              哎呀哎呀视频在线观看