我正在创建一个前端Vue组件。为此我使用Laravel项目中的数据和数据库。我得到的问题是来自Laravel的方法(AJAX调用也是这样)返回一个很好的数组,而另一个方法只返回带有AJAX调用的对象(集合?)。我需要两个调用返回一个数组,因为我在我的组件中使用了一些数组函数。
我尝试过各种各样的事情,前端作为后端。我已尝试在后端让laravel返回一个数组,在前端我尝试将对象设置为数组。两者都没有成功。
我的JS代码(和AJAX调用)
methods: {
countAllItems() {
this.countItems = this.items.length;
},
getUrl(items) {
let results = items;
results.forEach((item) => {
let id = item.id;
return item.url = `/advertisements/show/${id}`;
});
},
getMax(items) {
let boats = items.slice(0, 4);
this.items = boats;
this.getUrl(this.items);
this.countAllItems();
},
getBoats() {
axios.get('/api/boats')
.then((response) => {
//this will return an array
console.log(response.data);
this.items = response.data;
this.countAllItems();
this.getMax(this.items);
})
.catch((error) => console.log(error));
},
getReservations() {
axios.get('/api/popular')
.then((response) => {
//this will return objects, and must be an array
console.log(response.data);
this.items = response.data;
this.countAllItems();
this.getMax(this.items);
});
}
},
created() {
this.getBoats();
this.getReservations();
}
后端
//This will return the array
public function boats() {
return Boat::with('media')->get();
}
//This will return objects
public function messages() {
$boats = Boat::with('media')->get()->sortByDesc(function($boat) {
return count($boat->conversations);
});
return $boats;
}
有人可以帮助我吗?所以我需要修复一个在Laravel方法中返回一个数组,或者像一个函数来将两个对象都推送到JavaScript中的数组。
修改
所以我尝试了一些东西并做了一些事情发生在我身上。当我dd($boats)
时,它将返回一个集合。当我执行dd($boats->toArray)
时,它返回一个数组。奇怪的是,它在AJAX调用中没有任何区别。所以$boats->toArray()
仍然只返回对象,而不是数组中的对象。
我也尝试将对象推入数组中,但这也不起作用。它会将集合(作为对象)放入数组中。如何更改此对象将直接插入数组而不是作为对象的集合?
let arr = [];
arr.push(response.data);
console.log(arr);
答案 0 :(得分:1)
我认为集合操作有问题,当你进行集合操作时,它会改变值。
public function messages() {
$boats = Boat::with('media')->get();
$sorted = $boats->sortByDesc('do your sort here');
return $sorted->values();
}