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