laravel5.4中增删改查+搜索分页(运用ORM模式所做)。
阅读原文时间:2021年04月21日阅读:1

表名:3ls_school;

控制器名 :SchoolController.php

 模型层:School.php

工厂:SchoolRepository.php

第一步:建立学校工厂在/core/Repositories里面建SchoolRepository.php

内容为:

<?php 

namespace Core\Repositories;

use Core\Models\School; 
use Core\Repositories\SchoolRepository;

class SchoolRepository extends EloquentRepository

    public function __construct(School $model)
    {
        parent::__construct($model);
    }

    //add
    public function save($data)
    {
        $this->model->setRawAttributes($data);

        if ($this->model->save()) {
            return true;
       } else{
            return false;
       }
    }

    //select
    public function getList($perPage = 10, $where=[], $trash=0)
    {   
        
        $query = $this->model->whereNested(function ($q) use ($where) {
                foreach ($where as $key => $value) {
                    $q->where($value[0], $value[1], $value[2]);
                }
            });
        if ( $trash == 1 ){ 
            $query->onlyTrashed();
        }

        return $query->orderBy('id', 'ASC')->paginate($perPage);
    }

    //删除
    public function delete($id)
    {
        return $this->model->find($id)->delete();
    }

    /**
     * Find a single entity
     *
     * composite primary key array
     *  - MemberOption::scopeCompositeKey
     *
     * @param $id
     * @param array $with
     * @return Illuminate\Database\Eloquent\Model
     */
    //查询单条信息
    public function find($id, array $with = [])
    {
        $entity = $this->make($with);

        if (is_array($id)) {
            $model = $entity->compositeKey($id)->first();
        } else {
            $model = $this->model->find($id);
        }
       return $model;
    }

    public function findByField($field, $value, $columns = ['*'])
    {
        return $this->model->where($field, '=', $value)->first($columns);
    }

     /**
     * 根据条件查询单条记录
     * @param  array $filters [description]
     * @param  array $columns [description]
     * @return [type]          [description]
     */
    public function findWhere($filters = [], $columns = ['*'])
    {
        return $this->model->whereNested(function ($query) use ($filters) {
            foreach ($filters as $key => $value) {
                $query->where($value[0], $value[1], $value[2]);
            }
        })->first($columns);
    }

    //修改学校信息
    public function update($id, array $input)
    {
        return $this->model->where('id', '=', $id)->update($input);
    }
    
    //统计个数 
     public function count(array $where = [])
    {
        return $this->model->whereNested(function ($query) use ($where) {
            foreach ($where as $field => $value) {
                if (is_array($value)) {
                    list($condition, $val) = $value;
                    $query->where($field, $condition, $val);
                } else {
                    $query->where($field, '=', $value);
                }
            }
        })->count();
    }
       
}

第二步:建立模型层在在/core/Models里面建School.php

内容为:

<?php
namespace Core\Models;

use Illuminate\Database\Eloquent\Model;

class School extends Model
{
    protected $table = '3ls_school';
    public $timestamps = false;

    
}

第三步:建立模型层在在/app/Http/Controllers/里面建SchoolController.php

内容为:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Core\Repositories\SchoolRepository;

class SchoolController extends BackendController
{
    private $schools;

    public function __construct(SchoolRepository $schools)
    {
        parent::__construct();
        $this->schools = $schools;
    }

    //学校列表
    public function index(Request $request)
    {   
        $where=[];
        //判断是否接过学段值
        if ($request->get("period")!="") {
            $where[] = ['3ls_school.period', '=', $request->get("period")];
        }
        //判断是否接过性质值
        if ($request->get("snature")!="") {
           $where[] = ['3ls_school.snature', '=', $request->get("snature")];
        }
        //判断是否接过等级值
        if ($request->get("slevel")!="") {
           $where[] = ['3ls_school.slevel', '=', $request->get("slevel")];
        }
        //判断所选择的是省份还是市级
        $area=$request->get("area");
        if ($area!="") {
          if ($area=="province") {
              $where[] = ['3ls_school.province', '=', $request->get("search")];
          }else{
              $where[] = ['3ls_school.city', '=', $request->get("search")];
          }
        }
        //dd($where);
        if (!empty($where)) {//带有搜索条件的查询
           $perpage = $request->input('perpage', 10);
           $this->_view['lists'] = $this->schools->getList($perpage,$where);//所查询的结果集
           //dd(\DB::getQuerylog());
           $this->_view['perpage'] = $perpage;//每页显示条数
        }else{
           $perpage = $request->input('perpage', 10);
           $this->_view['lists'] = $this->schools->getList($perpage);//所查询的结果集
           $this->_view['perpage'] = $perpage;//每页显示条数
        }
        return view('school.index', $this->_view);
    }

    //学校添加表单页面
    public function create()
    {
      return view('school.create', $this->_view);
    }

    //添加学校
    public function store(Request $request)
    {
        $data['name'] = $request->input('name');
        $data['province'] = $request->input('s_province');
        $data['city'] = $request->input('s_city');
        $data['town'] = $request->input('s_county');
        $data['period'] = $request->input('period');
        $data['snature'] = $request->input('snature');
        $data['slevel'] = $request->input('slevel');
        $data['sadmin'] = $request->input('sadmin');
        $data['sphone'] = $request->input('sphone');
        $data['surl'] = $request->input('surl');
        $data['desc'] = $request->input('desc');
        //https://segmentfault.com/q/1010000004923615
        if ($request->hasFile('img')) {
            foreach ($request->file('img') as $file) 
            {
                $file->move(base_path().'/public/uploads/', $file->getClientOriginalName());
            }
        }
          $data['img']='/public/uploads/'.$file->getClientOriginalName();
          $this->schools->save($data);
          return redirect()->route('school.index');
    }

    //删除学校
    public function destroy($id)
    {
        $this->schools->find($id)->delete();
        return redirect('/school/');
    }

    //获取单条学校的信息
    public function edit($id)
    {
        $this->_view['school']=$this->schools->find($id);
        return view('school.edit', $this->_view);
    }

    //修改单条学校的信息
    public function update(Request $request, $id)
    {    
        $act['name']     = $request->input('name');
        $act['province'] = $request->input('s_province');
        $act['city']     = $request->input('s_city');
        $act['town']     = $request->input('s_county');
        $act['period']   = $request->input('period');
        $act['snature']  = $request->input('snature');
        $act['slevel']   = $request->input('slevel');
        $act['sadmin']   = $request->input('sadmin');
        $act['sphone']   = $request->input('sphone');
        $act['surl']     = $request->input('surl');
        $act['desc']     = $request->input('desc');
       if ($request->hasFile('img')){
           foreach ($request->file('img') as $file) 
           {
              $file->move(base_path().'/public/uploads/', $file->getClientOriginalName());
          }
        }
        $act['img']='/public/uploads/'.$file->getClientOriginalName();
        $this->schools->update($id,$act);
        return redirect()->route('school.index'); 
        
    }

}
    
   

   第四步:views视图层school目录里面的文件有form.blade.php index.blade.php create.blade.php edit.blade.php.

form.blade.php内容为:

@extends('layouts.default')

@section('page_styles')
    {!! HTML::style('assets/ace/css/datepicker.min.css') !!}
    {!! HTML::style('assets/ace/css/daterangepicker.min.css') !!}
    {!! HTML::style('assets/ace/css/bootstrap-duallistbox.min.css') !!}
@stop

@section('content')

    @yield('form')
   

                        
           
               
                   
                                               
                            {!! Form::text('name', null, ['class' => 'form-control']) !!}                        

                   

                    
                      

                   


                       
                       

                               

                               

                             

                       


                   

          
                   
                                               
                                                   

                   

                   

                                               
                                                   

                   

                   


                       
                       

                           
                       

                   

                   

                                               
                            {!! Form::text('sadmin', null, ['class' => 'form-control']) !!}                        

                   

                     

                                               
                            {!! Form::text('sphone', null, ['class' => 'form-control']) !!}                        

                   

                   

                                               
                            {!! Form::text('surl', null, ['class' => 'form-control']) !!}                        

                   

                   

                                               
                            {!! Form::textarea('desc',null, ['class' => 'form-control', 'placeholder'=>'150字以内','width'=>'100','height'=>'300']) !!}                        

                   

             
                   
                 

               

                   

                    @if (isset($school) && $school->portrait !='' )
                                                                                                                                       
                                            @endif
                    {!! Form::file('img[]',['id' => 'file-cover']) !!}
               

           

          
            

    

       


       
           
                           

       

   

    {!! Form::close() !!}
@stop

@section('pageplugins')

    {!! HTML::script('/js/area.js') !!}

    {!! HTML::script('/assets/ace/js/bootstrap-datepicker.min.js') !!}
    {!! HTML::script('/assets/ace/js/bootstrap-datepicker.zh-CN.js') !!}
    {!! HTML::script('/assets/ace/js/daterangepicker.min.js') !!}
    {!! HTML::script('/assets/kindeditor/kindeditor-min.js') !!}
    {!! HTML::script('/assets/kindeditor/lang/zh_CN.js?v=1') !!}
    {!! HTML::script('/assets/ace/js/jquery.validate.min.js') !!}
    {!! HTML::script('/assets/common/js/jquery.validate.method.js') !!}
@stop

@section('pagescripts')
    {!! HTML::script('assets/ace/pages/product.js?v=8') !!}
   

   
@stop

index.blade.php  

内容为:

@extends('layouts.pagelist')

@section('page_styles')
   
   
@stop

@section('breadcrumb')
   


@stop

@section('search')
   


@stop

@section('tbl_head')
                                        ID         学校         所在省         所在市         所在县         学段         学校性质         等级         管理员         联系方式         网址链接         操作    
@stop
 

@section('tbl_body')

    @foreach($lists as $item)
                                                            {{$item->id}}             {{$item->name}}             {{$item->province}}             {{$item->city}}             {{$item->town}}                         @if ($item->period ==1)                 幼儿园             @elseif ($item->period ==2)                 小学             @else                 中学             @endif                                         @if($item->snature==1)                 公立校                 @elseif($item->snature==2)                 私立校                 @else                 国际校                 @endif                                         @if($item->slevel==1)                 A级                 @elseif($item->slevel==2)                 B级                 @elseif($item->slevel==3)                 C级                 @else                 D级                 @endif                         {{$item->sadmin}}             {{$item->sphone}}                            {{$item->surl}}                                        

                                                                            
                   
    @endforeach

@stop

@section('pagescripts')
   
   
   
   

@stop

create.blade.php

内容为:

@extends('school.form')

@section('breadcrumb')


@stop

@section('form')

{!! Form::open(['route' => 'school.store', 'method' => 'post', 'class' => 'form-horizontal' , 'files' => true, 'id'=>'main-form' ]) !!}  
@stop

edit.blade.php

内容为:

@extends('school.form')

@section('breadcrumb')


@stop

@section('form')

{!! Form::model($school, [ 
    'route' => ['school.update', $school->id], 
    'method' => 'PUT', 
    'class' => 'form-horizontal' , 
    'files' => true,
    'id'=>'main-form'
    ]) 
!!}  
@stop

第五步:

routes里面route.php 配置信息:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
 
Auth::routes();

Route::get('secureimage', 'HomeController@secureimage');
 
Route::group(['middleware' => 'isAdmin'], function () {
Route::get('/', ['as' => 'dashboard', 'uses' => 'HomeController@index']);
Route::get('logout', 'Auth\LoginController@logout')->name('logout');
Route::resource('setting', 'SettingController');
Route::resource('lecture', 'LectureController');
Route::get('admin/trash', 'AdminController@getTrash')->name('admin.trash');
Route::resource('admin', 'AdminController');
Route::resource('permissions', 'PermissionsController');
Route::resource('roles', 'RoleController');
    Route::resource('vote', 'VoteController');
    Route::resource('setting', 'SettingController');
    Route::resource('user', 'UserController');
Route::resource('live', 'LiveController');
Route::resource('school', 'SchoolController');
});