我們現(xiàn)在有一個需求,前端既需要返回多個專題模塊,又需要提供相應的 id 時能獲得特定的專題模塊。
我們先看一下我們的數(shù)據(jù)表:

專題表

產(chǎn)品表

關聯(lián)表
我們新建兩個模塊和一個控制器: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,一對一關系關聯(lián) image 表的主鍵 id,所以用 belongsTo 方法。(而不用 hasOne)
而主題表和產(chǎn)品表是屬于多對多的關系,一個主題下面有多個產(chǎn)品,而一個產(chǎn)品可以屬于多個主題。(例如某些新上架的水果,既可以屬于水果主題,也可以屬于新鮮好物主題)所以這里用 belongsToMany 方法,belongsToMany('關聯(lián)模型名','中間表名','關聯(lián)的表的外鍵名','當前模型關聯(lián)鍵名');
現(xiàn)在我們看一下編寫控制器:
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');
這是后回發(fā)現(xiàn)運行時不管參數(shù)是由逗號拼接而成的 ids 還是 id 都會運行第一個 getSimpleList,這是因為沒有開啟全匹配模式。
在 config.php 中找到更改為 true 即可。
'route_complete_match' => true,
之后就可以正常的路由匹配了