使用Laravel ORM在Laravel中过滤数据hasmany& Vue 2

时间:2017-07-12 05:14:01

标签: javascript json laravel vuejs2

对不起,我使用Laravel ORM和Vue 2一起玩。

分析Json数据是一些问题..

laravel ORM

$banner = Banner::with('banner_img')->get();
return response()->json($banner);

Json数据

[{"id":10,"banner":"AIR","banner_img":[{"id":1,"img":"air_1.png","banner_id":10},{"id":2,"img":"air_2.png","banner_id":10}]},
{"id":11,"banner":"HOT","banner_img":[{"id":3,"img":"hot_1.png","banner_id":11},{"id":4,"img":"hot_2.png","banner_id":11}]},
{"id":12,"banner":"NEW","banner_img":[{"id":5,"img":"new_1.png","banner_id":12},{"id":6,"img":"new_2.png","banner_id":12}]}]

我的json数据有两个数组。

我想用Vue.js过滤这个json数据(banner_img:[' img'])。

Vue.js

var app = new Vue({
el: '#app',
data: {
    banner:[],
    search:'',
},
methods: {
    getBannerData: function() {
        axios.get('/case/ajax/33').then(response => {
            this.banner = response.data.banner;
        });
    },
},
mounted: function() {
   this.getBannerData();
},
computed: {
    filteredList() {
      return this.banner(value => {
        return value.banner.banner_img.img.toLowerCase().includes(this.search.toLowerCase())
      })
    }
}
});

HTML

<input type="text" name="ImgFilter" v-model="search">
<div v-for="value in filteredList">
    <img v-for="imgs in value.banner_img" :src="imgs.img" height="100">
</div>

然后我尝试return value.banner.banner_img.img,但是错了..

请给我一些建议〜!谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的JSON示例,每个对象在属性banner_img上都有一个值数组。因此value.banner.banner_img.img不正确,因为value.banner没有属性banner_img

试试这个:

filteredList() {
    return this.banner.filter(value => {
        return value.banner_img.filter(bannerImg => {
            return bannerImg.img.toLowerCase().includes(this.search.toLowerCase());
        });
    });
}