php框架——laravel

准备工作:见php语法篇末尾环境部署

一、【创建一个表+插入数据】:手动创建或者执行sql语句

DROP TABLE IF EXISTS `tb_business`;
CREATE TABLE IF NOT EXISTS `tb_business` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
  `category_id` int(10) UNSIGNED DEFAULT NULL COMMENT '品类id(tb_category)',
  `ename` varchar(64) NOT NULL COMMENT '英文名',
  `cname` varchar(64) NOT NULL COMMENT '中文名',
  PRIMARY KEY (`id`),
  UNIQUE KEY `business_cname_unique` (`cname`),
  UNIQUE KEY `business_ename_unique` (`ename`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT = '业务数据';

// 注意:// 如果主键设置了自增 末尾不必再设置AUTO_INCREMENT 或者 AUTO_INCREMENT = 0
INSERT INTO `tb_business` (`category_id`
, `ename`, `cname`) VALUES (1, 'lol', '英雄联盟'), (7, 'sugar', '糖罐');

二、【新建路由、获取请求参数、中间件处理逻辑、sql表db数据操作等文件】:

Route::post('activityType/get', 'ProjectController\ActivityType\ActivityType@getActivityType');//活动列表
<?php
namespace App\Http\Controllers\ProjectController\BusinessManage;//命名空间
use App\Http\Controllers\ProjectModel\BusinessManage\BusinessList;//间接操作
use App\Http\Controllers\ProjectModel\JsonRequest; //获取请求参数

class BusinessInfo
{
  //构建实例
  private $json_request;
  private $businessInfo;
  public function __construct()
  {
    // $this->json_request = new JsonRequest();//废弃
    $this->json_request = resolve(JsonRequest::class);
    $this->businessInfo = new BusinessList();//统一请求,定义在Database外部
  }

  //获取
  public function getBusinessInfo()
  {
    $res = $this->businessInfo->getTbBusinessInfo();
    return response()->success($res);
  }
  //查询某个业务
  public function searchBusinessInfo()
  {
    $id = $this->json_request->get('id');
    $res = $this->businessInfo->searchTbBusinessInfo($id);
    return response()->success($res);
  }

  //新建
  public function addBusinessInfo()
  {
    $category_id = $this->json_request->get('category_id');
    $ename = $this->json_request->get('ename');
    $cname = $this->json_request->get('cname');
    $res = $this->businessInfo->addTbBusinessInfo($category_id,$ename,$cname);
    return response()->success($res);
  }
  //更新
  public function updateBusinessInfo()
  {
    $id = $this->json_request->get('id');
    $category_id = $this->json_request->get('category_id');
    $ename = $this->json_request->get('ename');
    $cname = $this->json_request->get('cname');
    $res = $this->businessInfo->updateTbBusinessInfo($id,$category_id,$ename,$cname);
    return response()->success($res);
  }
  //删除
  public function delBusinessInfo()
  {
    $id = $this->json_request->get('id');
    $res = $this->businessInfo-> delTbBusinessInfo($id);
    return response()->success($res);
  }
}
<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage;
use App\Http\Controllers\ProjectModel\BusinessManage\Database\TbBusinessInfo;
use App\Http\Controllers\ProjectModel\ActivityManage\Logic\ActivityList;
use App\Http\Controllers\ProjectModel\Common\Protocol\Errors\Logic\Error;
class BusinessList {

    private $tbBusinessInfo;

    public function __construct()
    {
        $this->tbBusinessInfo = new TbBusinessInfo();
    }

    /**
     * 获取
     * @param string
     * @return array
     **/
    public function getTbBusinessInfo()
    {
        $info = $this->tbBusinessInfo->getBusinessInfo();
        return $info;
    }
    /**
     * 查询
     * @param string
     * @return array
     **/
    public function searchTbBusinessInfo($business_id)
    {
        $info = $this->tbBusinessInfo->searchBusinessInfo($business_id);
        return $info;
    }
    /**
     * 新增
     * @param string
     * @return array
     **/
    public function addTbBusinessInfo($category_id,$business_ename,$business_cname)
    {
        $info = $this->tbBusinessInfo->addBusinessInfo($category_id,$business_ename,$business_cname);
        return $info;
    }
    /**
     * 更新
     * @param string
     * @return array
     **/
    public function updateTbBusinessInfo($business_id,$category_id,$business_ename,$business_cname)
    {
        $info = $this->tbBusinessInfo->updateBusinessInfo($business_id,$category_id,$business_ename,$business_cname);
        return $info;
    }

    /**
     * 删除
     * @param string
     * @return array
     **/
    public function delTbBusinessInfo($business_id)
    {
        $activityClass = resolve_class(ActivityList::class);
        $activityList = $activityClass::search(["activity.business.id"=>$business_id]);
        if ( !$activityList->isEmpty() ) {
            throw new Error("有活动引用,需要先删除活动");
        }else{
            return $this->tbBusinessInfo->delBusinessInfo($business_id);
        }
    }
}
?>

放在Database文件夹的文件才是操作表数据的直接操作:写法就是laravel中的Eloquent的类封装

 

Eloquent: 关联

 https://learnku.com/docs/laravel/5.7/eloquent-relationships/2295

 

<?php
namespace App\Http\Controllers\ProjectModel\BusinessManage\Database;
use App\Http\Controllers\ProjectModel\Common\Database\EloBusinessBaseDatabase; //父类
class TbBusinessInfo extends EloBusinessBaseDatabase {
    //表名
    protected $table = "tb_business";
    
    //主键名
    protected $primaryKey = "id";
    
    //主键是自增id
    public $incrementing = true;

    //所有字段可以批量修改
    protected $guarded = [];

    /**
     * 获取业务信息
     * @param int
     * @return array
     **/
    public function getBusinessInfo()
    {
        return static::all();
    }
    /**
     * 查询
     * @param int
     * @return array
     **/
    public function searchBusinessInfo($business_id)
    {
        if(!$business_id){
            return "参数不可为空";
        } else {
            return static::where("id", $business_id)->first();
        }
    }
    /**
     * 添加业务信息
     * @param int
     * @return array
     **/
    public function addBusinessInfo($category_id,$business_ename,$business_cname)
    {
        $info = [];
        $info["category_id"] = $category_id;
        $info["ename"] = $business_ename;
        $info["cname"] = $business_cname;
        if(!$category_id || !$business_ename || !$business_cname){
            return "请求参数不全";
        } else {
            return static::create($info)
        }
    }
    /**
     * 更新
     * @param int id
     * @return object
     **/
    public function updateBusinessInfo($business_id, $category_id,$business_ename,$business_cname)
    {
        $info = [];
        $info["id"] = $business_id;
        $info["category_id"] = $category_id;
        $info["ename"] = $business_ename;
        $info["cname"] = $business_cname;
        if(!$business_id || !$category_id || !$business_ename || !$business_cname){
        return "请求参数不全";
        } else {
        return static::where( "id", $business_id)->update($info);
        }
    }
    /**
     * 删除业务信息
     * @param int
     * @return array
     **/
    public function delBusinessInfo($business_id)
    {
        if(!$business_id){
            return "参数不可为空";
        } else {
            return static::where( "id", $business_id)->delete();
        }
    }
}
?>

 

以下是常用表操作方法总结:

<?php
namespace App\Http\Controllers\ProjectModel\BusinessInfo\Database;
use App\Http\Controllers\ProjectModel\Common\Database\EloBusinessBaseDatabase; //父类
class TbBusinessInfo extends EloBusinessBaseDatabase {
    //表名
    protected $table = "tb_business";

    //主键名
    protected $primaryKey = "id";

    //主键是自增id
    public $incrementing = true;

    //所有字段可以批量修改
    protected $guarded = [];

    /**
     * 获取业务信息
     * @param int
     * @return array
     **/
    public function getBusinessInfo()
    {
//        return static::all();// 不能与where()共存
        return static::all()->groupBy('category_id');// 分组返回
//        return static::select('cname')->get();// 只返回某些字段
//        return static::distinct()->get();//去重返回
//        return static::count();// 返回总条数,max('xxx')某参数最大,min最小, avg平均,还有 sum求和
//        return static::orderBy('cname')->get();// 排序返回
//        return static::pluck('cname');// 返回指定内容index:value;或者(value,key)如:lol:英雄联盟
//        return static::get();// 可以与where()共存
//        return static::first();// 获取第一条
    }
    /**
     * 查询业务信息
     * @param int
     * @return array
     **/
    public function searchBusinessInfo($id)
    {
        if ($id){
            return static::where("category_id", $id)->get();//->first();返回指定范围where()
//            return static::where([ //多个条件
//                ['status', '=', '1'],
//                ['subscribed', '<>', '1'],
//            ])->get();
//            return static::select(static::raw('count(*) as user_count, status')); //原生表达式:DB::raw
//            return static::->selectRaw('price * ? as price_with_tax', [1.0825]);  //selectRaw()方法:
//            return static::->whereRaw('price > IF(state = "TX", ?, 100)', [200]);  //绑定参数的数组
//            return static::->havingRaw('SUM(price) > ?', [2500]);  //是否
//            return static::->orderByRaw('updated_at - created_at DESC');
//            return static::where("id", $id)->value('cname');//直接返回某个字符串
//            return static::select("category_id", "cname")->where("category_id", $id)->orderBy('cname')->take(10)->get();
//            return static::select("id", "ename", "cname")->where("id", $id)->get();
//            return static::where("category_id", $id)->get()->map(function ($item){
//                $item->data = '王者荣耀666';
//                return $item;
//            });
//            return static::findOrFail($id);
        }else{
            return null;
        }
    }
    /**
     * 添加业务信息
     * @param int
     * @return array
     **/
    public function addBusinessInfo($category_id,$business_ename,$business_cname)
    {
        $info = [];
        $info["category_id"] = $category_id;
        $info["ename"] = $business_ename;
        $info["cname"] = $business_cname;
        return static::create( $info);// 返回数组
//        return static::insert( //插入内容,返回true
////            ['category_id' => $category_id, 'ename' => $business_ename, 'cname' => $business_cname],
//            ['category_id' => $category_id, 'ename' => $business_ename, 'cname' => $business_cname]
//        );
    }
    /**
     * 添加业务信息
     * @param int
     * @return array
     **/
    public function updateBusinessInfo($id,$business_cname)
    {
//        $info = array(
//            "cname" => $business_cname
//        );
//        $info -> cname = $business_cname;//错误:对象或函数
        $info = [];
        $info["cname"] = $business_cname;
        if(!$id || !$business_cname){
            return '参数不全';
        }else{
            static::where( "id", $id)
//                ->update(['votes' => 1]) // 修改某个字符串或数字
//                ->update(['options->enabled' => true]) //修改json某个字段
                ->update($info); // 修改当前行所有参数
            return $info;
        }
    }
    /**
     * 删除业务信息
     * @param int
     * @return array
     **/
    public function delBusinessInfo($business_id)
    {
        return static::where( "id", $business_id)
//            ->truncate() //清空表
//            ->where('votes', '>', 100) //限制一个范围
            ->delete();// 直接删除
    }
}
?>

调试问题:连接到本地库,执行PHPstorm的测试文档

<?php
use Tests\TestCase;
use App\Http\Controllers\ProjectModel\BusinessInfo\Database\TbBusinessInfo;
class TestDemo extends TestCase {
    public function testBasicTest()
    {
        $res = new TbBusinessInfo();
        $info['error_code'] = '0';
        $info['data'] = $res->getBusinessInfo()->toArray();// 使用时不需要转换成简单的数组格式->toArray()
//        $info['data'] = $res->searchBusinessInfo('1')->toArray();
//        $info['data'] = $res->addBusinessInfo('2','test03','测试03')->toArray();
//        $info['data'] = $ai->updateBusinessInfo('1','英雄联盟');
//        dd(redirect('tb_business'));// 整个表数据
        dd($info);// 打印测试数据
    }
}

 

posted @ 2019-07-19 21:34  桥南小院  阅读(834)  评论(0编辑  收藏  举报