Laravel 发出请求并在发送到端点之前过滤控制器中的记录

Laravel 发出请求并在发送到端点之前过滤控制器中的记录,laravel,vue.js,vuejs2,Laravel,Vue.js,Vuejs2,我在数据库中有8000多条记录。我需要一个坚实的分页和过滤功能。为了实现这一点,我正在尝试在分页之前过滤记录并将其发送到端点 例如,在控制器中我请求关键字,并使用→when()如果有关键字,则使用该关键字过滤记录,然后→页码(20) 在控制器中 public function bridal(Request $request) { $keyword = $request->get("keyword"); $bridals = Place::with(["pl

我在数据库中有8000多条记录。我需要一个坚实的分页和过滤功能。为了实现这一点,我正在尝试在分页之前过滤记录并将其发送到端点

例如,在控制器中我请求
关键字
,并使用
→when()
如果有关键字,则使用该关键字过滤记录,然后
→页码(20)

控制器中

public function bridal(Request $request)
{       

    $keyword = $request->get("keyword");

    $bridals = Place::with(["plans" => function($query)
        {
            $query->orderBy("plans.plan_price");
        } 
    ])
    ->whereHas("plans")
    ->groupBy("address")
    ->when($keyword, function($query, $keyword){
        return $query->where("city", $keyword);
    })
    ->paginate(20);

    return $bridals;

}
路线

Route::match(["GET", "POST"], "bridal", "Api\BridalController@bridal");
我想在这里之前一切都很好。所以,让我们继续在前端

在vuex中:Store.js

state: {
    bridals: [],
    keyword: "",
},
mutations: {
    setBridals(state, bridal){
        state.bridals = bridal;
    },
    setKeywords(state, keys){
        state.keyword = keys;
    },
},
getters: {     
    getBridals(state){
        return state.bridals;
    },
},
actions: {
    bridalApi({commit}, payload){ 
        axios.get("api/bridal?page="+payload.page, {
            keyword: payload.forms.keyword
        })
        .then(response => {
            this.commit("setBridals", response.data);  
        })
        .catch(e => {
            console.log(e);
        })
    },
}
home组件中,我向控制器发送过滤器参数

 <form @submit.prevent="submit" method="post">
        <search-bar />
        <submit-btn />
 </form>


mounted(){
    this.$store.dispatch("bridalApi", {
        page: this.currentPage,
        forms: this.filterParams,
    });
},
methods: {
    submit(){
        this.$store.dispatch("bridalApi", {
            forms: this.filterParams,
        });
    },
},  
computed: {                
    filterParams(){
        let paramObj = {
            keyword: this.$store.state.bridal.keyword,
        }

        return paramObj;          
    }
},

安装的(){
这是$store.dispatch(“bridalApi”{
page:this.currentPage,
形式:this.filterParams,
});
},
方法:{
提交(){
这是$store.dispatch(“bridalApi”{
形式:this.filterParams,
});
},
},  
计算:{
过滤参数(){
设paramObj={
关键词:this.$store.state.bridal.keyword,
}
返回paramObj;
}
},
我不确定代码中有什么错误。我在哪里犯错误


p.S:顺便说一句,我设置并获取关键字
state.keyword
。。。很好用。我可以得到价值。我只是没有在这里添加输入代码

不要直接在计算块中访问状态,而是使用如下getter:
this.$store.getters.bridals