我們現(xiàn)在有一個(gè)需求,前端既需要返回多個(gè)專(zhuān)題模塊,又需要提供相應(yīng)的 id 時(shí)能獲得特定的專(zhuān)題模塊宋雏。
我們先看一下我們的數(shù)據(jù)表:
我們新建兩個(gè)模塊和一個(gè)控制器:Theme 模塊和 Product 模塊以及 Theme 控制器。
我們先編寫(xiě)一下 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');
}
因?yàn)?theme 表含有外鍵 topic_img_id 和 head_img_id泪蔫,一對(duì)一關(guān)系關(guān)聯(lián) image 表的主鍵 id,所以用 belongsTo 方法喘批。(而不用 hasOne)
而主題表和產(chǎn)品表是屬于多對(duì)多的關(guān)系撩荣,一個(gè)主題下面有多個(gè)產(chǎn)品,而一個(gè)產(chǎn)品可以屬于多個(gè)主題饶深。(例如某些新上架的水果餐曹,既可以屬于水果主題,也可以屬于新鮮好物主題)所以這里用 belongsToMany 方法敌厘,belongsToMany('關(guān)聯(lián)模型名','中間表名','關(guān)聯(lián)的表的外鍵名','當(dāng)前模型關(guān)聯(lián)鍵名');
現(xiàn)在我們看一下編寫(xiě)控制器:
class Theme
{
public function getSimpleList($ids='')
{
...
return $result;
}
public function getComplexOne($id){
...
return $result;
}
}
我們接下連寫(xiě)一下路由:
Route::get('api/:version/theme','api/:version.Theme/getSimpleList');
Route::get('api/:version/theme/:id','api/:version.Theme/getComplexOne');
這是后回發(fā)現(xiàn)運(yùn)行時(shí)不管參數(shù)是由逗號(hào)拼接而成的 ids 還是 id 都會(huì)運(yùn)行第一個(gè) getSimpleList凸主,這是因?yàn)闆](méi)有開(kāi)啟全匹配模式。
在 config.php 中找到更改為 true 即可额湘。
'route_complete_match' => true,
之后就可以正常的路由匹配了