laravel订单列表模糊搜索及关联数据api

阅读: 评论:0

laravel订单列表模糊搜索及关联数据api

laravel订单列表模糊搜索及关联数据api

本文目录

  • 一、订单列表模糊搜索及关联数据api
    • 1.1 创建订单模型迁移文件
    • 1.2 订单表字段
    • 1.3 订单从表
    • 1.4 订单从表字段
    • 1.5 订单路由创建
    • 1.6 创建订单及订单细节transform
      • 1、创建订单OrderTransformer.php:
      • 2、创建订单细节OrderDetailsTransformer.php:
    • 1.7 订单控制器
    • 1.8 优化
    • 1.9 测试

一、订单列表模糊搜索及关联数据api

1.1 创建订单模型迁移文件

运行命令创建订单模型以及迁移文件:
php artisan make:model Order -m

1.2 订单表字段

        Schema::create('orders', function (Blueprint $table) {$table->id();$table->integer('user_id')->comment('下单的用户');$table->integer('order_no')->comment('订单号');$table->integer('amount')->comment('总金额,单位分');$table->tinyInteger('status')->default(1)->comment('订单状态:1=>下单,2=>支付,3=>发货,4=>收获');$table->integer('address_id')->comment('收获地址');$table->string('express_type')->comment('快递类型:SF,YT,YD');$table->string('express_no')->comment('快递单号');$table->timestamp('pay_time')->nullable()->comment('支付时间');$table->string('pay_time')->nullable()->comment('支付类型:支付宝,微信');$table->string('trade_no')->nullable()->comment('支付单号:支付宝,微信');$table->timestamps();});

1.3 订单从表

再创建一个从表和模型,记录这个订单包含多产品的一些信息:
运行命令:php artisan make:model OrderDetails -m

1.4 订单从表字段

Schema::create('order_details', function (Blueprint $table) {$table->id();$table->integer('order_id')->comment('所属订单');$table->integer('goods_id')->comment('商品');$table->integer('price')->comment('商品价格');$table->integer('num')->comment('商品数量');$table->timestamps();});


执行迁移命令:
php artisan migrate


1.5 订单路由创建

            /*** 订单管理*/// 订单列表$api->get('orders', [OrderController::class, 'index']);// 订单详情$api->get('orders/{order}', [OrderController::class, 'show']);// 订单发货$api->patch('orders/{order}/post', [OrderController::class, 'post']);


手动添加订单一些数据(这些数据是用户端那边产生的,这部分还没写,我们暂时先手动写一些数据测试):

添加订单详情数据:

1.6 创建订单及订单细节transform

1、创建订单OrderTransformer.php:

<?php namespace AppTransformers;use AppModelsOrder;
use LeagueFractalTransformerAbstract;class OrderTransformer extends TransformerAbstract {public function transform(Order $order) {return ['id' => $order->id,'order_no' => $order->order_no,'user_id' => $order->user_id,'amount' => $order->amount,'status' => $order->status,'address_id' => $order->address_id,'express_type' => $order->express_type,'express_no' => $order->express_no,'pay_time' => $order->pay_time,'pay_type' => $order->pay_type,'trade_no' => $order->trade_no,'created_at' => $order->created_at,'updated_at' => $order->updated_at,];}
}


2、创建订单细节OrderDetailsTransformer.php:

<?php namespace AppTransformers;use AppModelsOrderDetails;
use LeagueFractalTransformerAbstract;class OrderDetailsTransformer extends TransformerAbstract {protected $availableIncludes = ['goods'];public function transform(OrderDetails $orderdetails) {return ['id' => $orderdetails->id,'order_id' => $orderdetails->order_id,'goods_id' => $orderdetails->goods_id,'price' => $orderdetails->price,'num' => $orderdetails->num,'created_at' => $orderdetails->created_at,'updated_at' => $orderdetails->updated_at,];}/*** 额外订单*/public function includeGoods(OrderDetails $orderdetails) {return $this->item($orderdetails->goods, new GoodTransformer());}}

1.7 订单控制器

运行命令:php artisan make:controller Admin/OrderController

写入列表控制器方法,如下代码:

    /*** 订单列表*/public function index(Request $request) {// 查询条件$order_no = $request->input('order_no'); // 通过订单号$trade_no = $request->input('trade_no'); // 通过交易单号$status = $request->input('status'); // 通过状态$orders = Order::when($order_no, function ($query) use($order_no) {$query->where('order_no', 'like', "%$order_no%");})->when($trade_no, function ($query) use($trade_no) {$query->where('trade_no', 'like', "%$trade_no%");})->when($status, function ($query) use($status) {$query->where('status', $status);})->paginate();return $this->response->paginator($orders, new OrderTransformer());}

1.8 优化

找到订单模型,写入关联用户和细节的方法:

    /*** 所属用户*/public function user() {return $this->belongsTo(User::class, 'user_id', 'id');}/*** 订单拥有的订单细节*/public function orderDetails() {return $this->hasMany(OrderDetails::class, 'order_id', 'id');}


找到订单细节模型,写入关联订单和产品的方法:

    /*** 所属订单表*/public function order() {return $this->belongsTo(Order::class, 'order_id', 'id');}/*** 所关联的商品*/public function goods() {return $this->hasOne(Good::class, 'id', 'goods_id');}

OrderTransformer.php定义受保护的$availableIncludes和方法,让外部可以引用:

protected $availableIncludes = ['user', 'orderDetails'];/*** 用户数据*/public function includeUser(Order $order) {return $this->item($order->user, new UserTransformer());}/*** 细节数据*/public function includeOrderDetails(Order $order) {return $this->collection($order->orderDetails, new OrderDetailsTransformer());}


1.9 测试


可以看到模糊搜索以及传入include就可以去到相对应的值。



可以看到这边订单的详情的商品都是只有id,没有一些商品的相关信息,如果用这个商品的id再去查这个商品的详情,那么这个做法将是很low的。但是我们在写订单详情的OrderDetailsTransformer.php已经关联了商品的信息,可以通过如下操作获取相对应的商品详情数据:

可以看到这边的商品的详情数据已经回来了。我们在给前端提供接口的时候,尽量提供一个就能使用比较完整的接口。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

本文发布于:2024-02-01 07:54:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674527435021.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模糊   订单   数据   列表   laravel
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23