簡體   English   中英

如何在Laravel中保存數據庫操作

[英]How to save database operation in laravel

感謝您收看我的第一個問題。
我有些困惑。
如何將數據庫的操作寫入數據庫,而不是在每個Controller中都編寫函數?
我考慮過中間件,發現它必須更改我的路由寄存器樣式。
我的路線是這樣的:

Route:resource('province','\\Modules\\Info\\Controllers\\P_ProvinceController');

劑量它有一些很棒的方法可以代替嗎?

 public function Store(Request $request)
        {
            $params = $request->input('data');
            $params['CreateID'] = Auth::user()->id;
            $params['CreateName'] = Auth::user()->name;
            $params['CreateTime'] = Carbon::now();
            $province = P_ProvinceModel::Create($params);
            $params['Pro_Is_Del'] = 1;
            $log_info['table'] = $province->getTable();
            $log_info['type']  = "create";
            $log_info['user']  = Auth::user()->name;
            $log_info['datetime'] =  Carbon::now();
            LogModel::create($log_info);
            if($province){
                return response()->json(array(
                    'status' => 200,
                    'msg' => '新增成功',
                    'data' => $province
                ));
            }else
                return response()->json(array(
                    'status' => 500,
                    'msg' => '保存失敗',
                ));

        }

謝謝。

這是我跨模型功能解決的方法

首先創建一個可以保存所需內容的特征。

<?php

namespace App\Models\Observers;

trait CreatedByObserver
{
    public static function bootCreatedByObserver(){
        /** Simply means that whenever this model is creating a model do: */
        static::creating(function($model){
            if(auth()->check()){
                 $responsiblePerson = auth()->user()->first_name . " " . auth()->user()->last_name;
            } else {
                 $responsiblePerson = "system";
            }
            /** You can set any model variables within */
            $model->created_by = $responsiblePerson;
        });
    }
}

保存/創建/更新/刪除記錄時,您需要做的所有事情

然后在所有要使用此行為的模型中添加特征。

在這里查看它們: https : //laravel.com/docs/5.2/eloquent#events

據我了解您的問題,您正在尋找使控制器成為抽象類型的方法,即控制器只需要處理路由並查看其他任何事物(如數據庫,應用程序邏輯等),這就是laravel框架的理念。

要使您的控制器抽象(如前所述,抽象的含義),首先需要了解“應用邏輯是什么,數據庫邏輯是什么?” 當您了解了這兩件事之后,就可以輕松地將應用程序邏輯和數據庫邏輯從控制器中分離出來。

例如:為了保持您的應用程序邏輯,您可以在項目的根目錄中創建service文件夾,也可以在同一service路徑中創建文件夾名稱“ Dao”(數據庫訪問對象)。 您需要將這些文件夾保留在從作曲家自動加載的位置。 只需為服務和您的Dao上課。

現在您的應用程序將是First Route,它將命中控制器,然后控制器將需要在service調用某些方法,然后服務將調用相應的DAO 方法。

范例:

Controller / YourController.php

Class YourController extends Controller {

 public function Store(Request $request,yourservice,$yourService)
        {
        $this->myservice = $yourservice;
        $this->myservice->store('your inputs request');
return $something ;
}


}

service / yourService.php

    Class yourService {

    public function store($yourinputs,yourDao $mydao){

     $this->mydao = $mydao;

//you can use your application logic here 
    return $this->mydao->create($yourinputs);
    }

現在輪到DAO

dao / yourdao.php

use model // use your model here .
    class yourDao {
       public function create($yourdata,yourmodel $model){
       $this->model = $model;
      return $this->model->create($yourdata);

}
    }

現在,您可以看到控制器只是將數據保存在數據庫中,但是不知道它如何保存數據以及應用程序的邏輯是什么。 這種解釋只是做項目以使控制器抽象的一種簡單方法。 還有其他多種方法可以執行此操作。 例如,您可以看到laravel core也使用的Repository Design Pattern

希望這種解釋不會讓任何人感到厭煩。 :)編碼愉快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM