查看结果, 符合预期:
d. 现在我们来解析上面路由的第4条和第5条:
Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']); Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']);
这俩路由我就不演示了, 分别解释一下, match
里路由为指定的请求方式, 一种或多种,
而 any
则是匹配任意方式, 无论是通过 get
还是 post
方式请求, 都能得到我们想要的结果.
我们再看看上面我设计的goods表
我们能看到这两条数据不知道创建的用户是谁, 但是有uid值, 这时候我们希望一个接口既返回商品信息又能够让我知道创建者是谁, 此时就需要用到多表联查了, 我们新增一个路由:
Route::get('test/queryGoods',['uses' => 'TestController@queryGoods']);
然后 TestController
里新增一个 queryGoods
方法:
public function queryGoods() { $goods = DB::table('goods') ->leftJoin('user', 'goods.uid', '=', 'user.id') ->get(); return json_encode($goods); }
如期望一样返回数据:
[{ id: 1, uid: 1, name: "测试商品1", desc: null, img_urls: null, price: "99.00", old_price: "78.00", real_name: "陈云", nickname: "穷摇.", head_url: null, age: null, gender: null, level: null }, { id: 2, uid: 2, name: "测试商品2", desc: null, img_urls: null, price: "290.00", old_price: "389.00", real_name: "欧阳欣欣", nickname: "小欣欣", head_url: null, age: null, gender: null, level: null } ]
但是用户信息所有字段全部被返回了, 有些时候我们为了安全, 只需要返回指定字段, 比如我们只需要返回 user
表中的 real_name
和 head_url
字段, 那么我们就需要做一下字段的约束:
public function queryGoods() { $goods = DB::table('goods') ->leftJoin('user', 'goods.uid', '=', 'user.id') ->select('goods.*', 'user.real_name', 'user.head_url') ->get(); return json_encode($goods); }
关注下这行代码:
select('goods.*', 'user.real_name', 'user.head_url')
这行代码表示返回goods表中的 所有字段
以及user表中的 real_name
和 head_url
字段, 就完美达到了我们想要的结果.
新增
至此查询已经基本写的差不多了, 我们开始向数据表里