2016-03-10 4 views
0

Спасибо, что посмотрели мой первый вопрос.
У меня что-то смущено.
Как я могу написать операции с базой данных в базу данных и не писать функцию в каждом контроллере?
Я рассматривал промежуточное программное обеспечение и обнаружил, что должен изменить стиль моего маршрутного регистра.
мой маршрут таков:Как сохранить операцию базы данных в laravel

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

     } 

Спасибо.

+0

Laravel У вас есть функция, называемая 'save()', и более подробную информацию можно найти на странице https://laracasts.com/series/laravel-5-from-scratch и еще несколько бесплатных видеоуроков, посвященных laravel, доступных бесплатно и немного оплачиваются. –

+0

Я могу сохранить результат в базе данных методом LogModel :: create(). Я не хочу писать метод в каждом контроллере. Потому что я уже написал много контроллеров. Как я могу закончить его без изменения каждого контроллера .. – wtySk

+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

+0

Спасибо большое! Я попробую сейчас – wtySk

+0

@wtySk Если это сработало, отметьте как правильно. Может с некоторыми rep – Chris

+0

извините за это :) Я просто понимаю, как использовать признак в классе. Я помещаю статическую функцию в каждую модель, и она работает! lol ~ .thanks для вашего быстрого точного ответа помогите мне закончить вопрос. @Chris И спасибо другим. – wtySk

0

Насколько я понимаю ваш вопрос, вы просите способ сделать ваш контроллер абстрактного типа, то есть контроллер просто нужно обрабатывать маршрут и просматривать не любые другие вещи (например, база данных, логика приложения и т. д.), которая является философией laravel Framework.

Чтобы сделать ваш контроллер абстрактным (с абстрактом, как описано ниже), Прежде всего вам нужно понять, «Какова ваша логика приложения и что такое логика базы данных?» , когда вы понимаете эти две вещи, вы можете легко отделить логику вашего приложения и логику данных от своего контроллера.

Например: Для поддержания вашей логики приложения вы можете сделать service папку в корневом каталоге вашего проекта также вы можете сделать имя папки «Dao» (объект доступа к базе данных) в том же пути service. Вам нужно сохранить эту папку в автозагрузке от вашего композитора. Просто сделайте класс для обслуживания и вашего Dao.

И теперь ваша заявка будет продолжение, Первого маршрута, ударит контроллер, то контроллер необходимо вызвать какой-либо метод в service, а затем сервис будет вызывать соответствующую DAO. метод.

Пример:

Контроллер/YourController.php

Class YourController extends Controller { 

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


} 

услуги/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:

дао/yourdao.php

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

} 
    } 

Теперь вы можете увидеть контроллер просто сохранить данные в базе данных, но не знаю, как он сохраняет данные и какова логика приложения. Это объяснение - просто простой способ сделать проект для создания абстрактного контроллера. Существуют и другие способы сделать это. Например, вы можете увидеть Repository Design Pattern, который также используется ядром laravel.

Надеюсь, что это объяснение никому не принесет. :) Счастливое кодирование.

Смежные вопросы