如何在laravel中保存数据库操作

时间:2016-03-10 08:07:42

标签: php 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' => '保存失败',
                ));

        }

感谢。

2 个答案:

答案 0 :(得分:0)

以下是我解决模型功能的方法

首先创建一个可以保存的特征。

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

答案 1 :(得分:0)

据我了解你的问题,你要求的方法是使你的控制器成为一个抽象类型,即控制器只需要处理路由并且不需要查看任何其他东西(如数据库,应用程序逻辑等),这是一种哲学。 laravel框架。

为了使你的控制器抽象(抽象的含义如aboave所述), 首先,您需要了解,&#34;您的应用程序逻辑是什么以及您的数据库逻辑是什么?&#34; 当您了解这两件事时,您可以轻松地将应用程序逻辑和数据库逻辑与控制器分开。

例如: 为了保留您的应用程序逻辑,您可以在项目的根目录中创建Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames INFO: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper instantiateListeners INFO: Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext] Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners INFO: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5594a1b5, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6a5fc7f7, org.springframework.test.context.support.DirtiesContextTestExecutionListener@3b6eb2ec, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1e643faf, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@6e8dacdf] 文件夹,也可以创建文件夹名称&#39; Dao&#39; (数据库访问对象)在service的相同路径中。您需要将这些文件夹保留在作曲家的自动加载中。只需上课服务和你的Dao。

现在你的申请将是, 第一条路线,将命中控制器,然后控制器需要调用service中的某个方法,然后服务将调用相应的service。方法。

示例:

<强>控制器/ YourController.php

DAO

<强>服务/ yourService.php

Class YourController extends Controller {

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


}

现在转向 Class yourService { public function store($yourinputs,yourDao $mydao){ $this->mydao = $mydao; //you can use your application logic here return $this->mydao->create($yourinputs); }

dao / yourdao.php

DAO

现在,您可以看到控制器只是将数据保存在数据库中,但不知道它是如何保存数据的以及应用程序逻辑是什么。 这个解释只是一个简单的方法来做一个控制器抽象的项目。还有其他各种方法可以做到这一点。例如,您可以看到Repository Design Pattern,它也被laravel core使用。

希望这个解释不会让任何人感到厌烦。 :)快乐的编码。