我们现在有一个需求,前端既需要返回多个专题模块,又需要提供相应的 id 时能获得特定的专题模块。
我们先看一下我们的数据表:
专题表
产品表
关联表
我们新建两个模块和一个控制器:Theme 模块和 Product 模块以及 Theme 控制器。
我们先编写一下 Theme 模块:
protected $hidden = ['delete_time','update_time','topic_img_id','head_img_id'];
public function topicImg(){
return $this->belongsTo('Image','topic_img_id','id');
}
public function headImg(){
return $this->belongsTo('Image','head_img_id','id');
}
public function products(){
return $this->belongsToMany('Product','theme_product','product_id','theme_id');
}
因为 theme 表含有外键 topic_img_id 和 head_img_id,一对一关系关联 image 表的主键 id,所以用 belongsTo 方法。(而不用 hasOne)
而主题表和产品表是属于多对多的关系,一个主题下面有多个产品,而一个产品可以属于多个主题。(例如某些新上架的水果,既可以属于水果主题,也可以属于新鲜好物主题)所以这里用 belongsToMany 方法,belongsToMany('关联模型名','中间表名','关联的表的外键名','当前模型关联键名');
现在我们看一下编写控制器:
class Theme
{
public function getSimpleList($ids='')
{
...
return $result;
}
public function getComplexOne($id){
...
return $result;
}
}
我们接下连写一下路由:
Route::get('api/:version/theme','api/:version.Theme/getSimpleList');
Route::get('api/:version/theme/:id','api/:version.Theme/getComplexOne');
这是后回发现运行时不管参数是由逗号拼接而成的 ids 还是 id 都会运行第一个 getSimpleList,这是因为没有开启全匹配模式。
在 config.php 中找到更改为 true 即可。
'route_complete_match' => true,
之后就可以正常的路由匹配了
网友评论