[英]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.