作为程序员一定要保持良好的睡眠,才能好编程

laravel中model类及简单的controller

发布时间:2019-09-19



model

class Order extends Illuminate\Database\Eloquent\Model{
    
        const REFUND_STATUS_PENDING = 'pending';
        const REFUND_STATUS_APPLIED = 'applied';
        const REFUND_STATUS_PROCESSING = 'processing';
        const REFUND_STATUS_SUCCESS = 'success';
        const REFUND_STATUS_FAILED = 'failed';
        
        const SHIP_STATUS_PENDING = 'pending';
        const SHIP_STATUS_DELIVERED = 'delivered';
        const SHIP_STATUS_RECEIVED = 'received';
        
        public static $refundStatusMap = [
            self::REFUND_STATUS_PENDING    => '未退款',
            self::REFUND_STATUS_APPLIED    => '已申请退款',
            self::REFUND_STATUS_PROCESSING => '退款中',
            self::REFUND_STATUS_SUCCESS    => '退款成功',
            self::REFUND_STATUS_FAILED     => '退款失败',
        ];
        
        public static $shipStatusMap = [
            self::SHIP_STATUS_PENDING   => '未发货',
            self::SHIP_STATUS_DELIVERED => '已发货',
            self::SHIP_STATUS_RECEIVED  => '已收货',
        ];
        
        protected $fillable = [
            'no',
            'address',
            'total_amount',
            'remark',
            'paid_at',
            'payment_method',
            'payment_no',
            'refund_status',
            'refund_no',
            'closed',
            'reviewed',
            'ship_status',
            'ship_data',
            'extra',
        ];
        //数据类型转换
        protected $casts = [
            'closed'    => 'boolean',
            'reviewed'  => 'boolean',
            'address'   => 'json',
            'ship_data' => 'json',
            'extra'     => 'json',
        ];
        
        protected $dates = [
            'paid_at',
        ];
    
    protected static function boot()
       {
            parent::boot();
            // 监听模型创建事件,在写入数据库之前触发
            static::creating(function ($model) {
                // 如果模型的 no 字段为空
                if (!$model->no) {
                    // 调用 findAvailableNo 生成订单流水号
                    $model->no = static::findAvailableNo();
                    // 如果生成失败,则终止创建订单
                    if (!$model->no) {
                        return false;
                    }
                }
            });
            
            
            /** 新增纪录生成雪花ID并校验规则 */
            self::creating(function ($model) {
                $model->global_id = Snowflake::generateId();
                Validator::make($model->toArray(),self::$rules)->validate();
            });
            /** 新增纪录生成雪花ID或更新,并校验规则 */
            self::saving(function ($model) {
                if (! $model->global_id) {
                    $model->global_id = Snowflake::generateId();
                }
                Validator::make($model->toArray(),self::$rules)->validate();
            });
            /** 更新记录,并校验规则 */
            self::updating(function ($model) {
                Validator::make($model->toArray(),self::$rules)->validate();
            });
        }
        
        
        public function user()
        {
            return $this->belongsTo(User::class);
        }
        
        public function items()
        {
            return $this->hasMany(OrderItem::class);
        }
        
        public function couponCode()
        {
            return $this->belongsTo(CouponCode::class);
        }
    
    
}




model关联模型

//关联模型
public function bgLongsToLevel(){
    return $this->belongsTo("App\Http\Models\Level","level","id");
}



控制器类

<?php

namespace App\Http\Controllers\Admin;
use App\Http\Models\Nav;
use App\Http\Models\Manage;
use App\Http\Requests;
use App\Http\Models\Article;
use App\Org\Tools;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Symfony\Component\HttpFoundation\Request;

class ArticleController extends CommonController{

    public function index(){
        $list=Article::orderby("sort","desc")->paginate(config("webset.paginate"));
        return view("admin.article.index",compact("list"));
    }
    //添加  /admin/manage/create
    public function create(){
        $isfou=[1=>trans("admin.shi"),'0'=>trans("admin.fou")];
        $nav=Tools::navList(Nav::orderby("sort","asc")->where("mshow","=",1)->get());
        $attr_list=[1=>"推荐"];
        //得到管理员列表  默认显示自己
        $manageList=Manage::where("islogin","=",1)->get()->lists("username","id")->toArray();

        return view("admin.article.create",compact("isfou","nav","attr_list","manageList"));
    }
    //添加post admin/manage
    public  function store(Request $request){
        $input=$request->except("_token");
        if(isset($input['attr'])&&sizeof($input['attr'])){
            $input['attr']=implode(",",$input['attr']);
        }else{
            $input['attr']="";
        }
        //进行validata的验证,保存数据返回
        $rules=[
            "title"=>'required',
            "nav"=>"required",
            "content"=>"required"
        ];
        $message=[
            "title.required"=>"标题不能为空",
            "nav.required"=>"请选择对应的栏目",
            "content.required"=>"内容不能为空"
        ];
        $validator=Validator::make($input,$rules,$message);
        if($validator->passes()){
            $input=Article::checkData($input,Article::getFiledList());
            $res=Article::create($input);
            if($res){
                $_data=[
                    "waitTimes"=>2,
                    "info"=>trans("public.success"),
                    "forwardurl"=>url("admin/article")
                ];
                return view("admin.success")->with("data",$_data);
            }else{
                $request->flash();
                return back()->withInput();
            }
        }else{
            $request->flash();
            return back()->withErrors($validator)->withInput();
        }
    }

    //edit get/patch
    public function edit($id){
        $data=Article::find($id);
        $prevPage=Tools::getPrevPage();
        $list=[1=>trans("admin.shi"),'0'=>trans("admin.fou")];
        $level=Level::orderby("id","asc")->lists("title","id");
        return view("admin.article.edit",compact("data","prevPage","list","level"));
    }
    //修改
    public function update(Request $request){
        $input=$request->except("_token");
        if(isset($input['attr'])&&sizeof($input['attr'])){
            $input['attr']=implode(",",$input['attr']);
        }else{
            $input['attr']="";
        }
        $rules=[
            "title"=>'required',
            "nav"=>"required",
            "content"=>"required"
        ];
        $message=[
            "title.required"=>"标题不能为空",
            "nav.required"=>"请选择对应的栏目",
            "content.required"=>"内容不能为空"
        ];

        $validator=Validator::make($input,$rules,$message);
        if($validator->passes()){
            $input=Article::checkData($input,Article::getFiledList());
            $res=Article::where("id","=",$input['id'])->update($input);
            if($res){
                $_data=[
                    "waitTimes"=>2,
                    "info"=>trans("public.success"),
                    "forwardurl"=>url("admin/manage")
                ];
                return view("admin.success")->with("data",$_data);
            }else{
                return back()->withErrors($validator);
            }
        }else{
            return back()->withErrors($validator);
        }
    }

    //搜索
    public function k($tit=""){
        $list=DB::table("article")->select(["id","title"])->where('title', 'like', '%'.$tit.'%')->get();
        if(sizeof($list)>0){
            echo json_encode($list);
        }
    }

    //删除 DELETE admin/manage/{manage}
    public function destroy($id){
        $res=Article::destroy($id);
        if($res){
            echo json_encode(['status'=>1,"info"=>trans("public.del_success")]);
        }else{
            echo json_encode(['status'=>0,"info"=>trans("public.failure")]);
        }
    }
    //排序
    public function sort(Request $request){
        $result=Article::where("id","=",$request->get("id"))->update(['sort'=>$request->get("sort")]);
        echo $result?json_encode(["status"=>1,"info"=>trans("admin.sort_success")]):json_encode(["status"=>0,"info"=>trans("admin.sort_failure")]);
    }
    //批量删除
    public function pldel(Request $request){
        if($request->get("ids")){
            $ids=explode(",",$request->get("ids"));
            $res=Article::destroy($ids);
            if($res){
                echo json_encode(['status'=>1,"info"=>trans("admin.del_pl_success")]);
            }else{
                echo json_encode(['status'=>0,"info"=>trans("public.failure")]);
            }
        }
    }
}





带有验证规则控制器增加方法

public function register(){
    
        $this->validate(request(),[
            'namme'=>'required|min:3|unique:users,name',
            'email'=>'required|unique:users,email|email',
            'password'=>'required|min:5|max:10|confirmed'
        ]);
        
       $name=request('name');
       $email=request('email');
       $password=reqeust('password');
       
       $user=User::create(compact('name','email','password'));
       
       return view('/login');
       
       

}



方法片段2

public function settingStore(){
    
     $this->validate(request(),[
            'namme'=>'required|min:3|unique:users,name'           
        ]);
    
    $name=request('name');
    if(User::where('name',$name)->count()>0){
    
        return back()->withErrors('用户已经存在,不能重复注册');
    }    
    
    ....    

}