#php #laravel #vue.js
Вопрос:
Пожалуйста, помогите, я пытаюсь отобразить несколько категорий на странице продукта, но я получаю неправильные категории. Существует много — много отношений. Не могу найти ответ в Google.
Страница продукта (Vue), помеченная желтым, отображается неправильная категория
Categories.php
class Categories extends Model
{
public function records() {
return $this->belongsToMany(Record::class, 'category_record', 'record_id', 'categories_id')->withTimestamps();
}
}
Record.php
class Record extends Model
{
protected $fillable = [
'name', 'price', 'description', 'units', 'image', 'size', 'color'
];
public function categories() {
return $this->belongsToMany(Categories::class, 'category_record', 'record_id', 'categories_id')->withTimestamps();
}
}
RecordController.php
class RecordController extends Controller
{
public function index() {
return RecordIndexResource::collection(
Record::all()
);
}
public function show($id) {
return new RecordShowResource(Record::findOrFail($id));
}
}
RecordShowResource.php
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'description' => $this->description,
'price' => $this->price,
'units' => $this->units,
'size' => $this->size,
'color' => $this->color,
'image' => $this->image,
];
}
Запись.vue для отображения данных:
<template>
<div class="review-page">
<div class="record-wrapper" v-if="!loading">
<div class="record-text">
<img :src="'/storage/' record.image" :alt="record.title" />
<div class="record-title">{{ record.title }}</div>
<hr />
<div v-for="(category, index) in categories" :key="index">
<p>Categories: {{ category.name }}</p>
</div>
<br />
<p>Product Details</p>
<div class="record-description">{{ record.description }}</div>
<div class="record-details-price">amp;#8364;{{ record.price }}</div>
</div>
<record-options v-bind="record" />
</div>
<div class="loading" v-else></div>
</div>
</template>
<script>
import RecordOptions from "./RecordOptions.vue";
export default {
components: {
RecordOptions,
},
data() {
return {
record: null,
categories: [],
loading: false,
};
},
async created() {
this.loading = true;
await axios.get(`/api/records/${this.$route.params.id}`).then((response) => {
this.record = response.data.data;
this.loading = false;
});
axios
.get(`/api/categories/${this.$route.params.id}`)
.then((response) => {
this.categories = response.data;
})
.catch((error) => {
console.log(error);
});
},
};
</script>
пожалуйста, помогите мне найти способ.
Комментарии:
1. привет, пожалуйста, добавьте также функцию возврата RecordShowResource 🙂
2. Привет, только что добавил.
3. Я думаю, что вам не хватает модальности сводной таблицы. Пожалуйста, загляните сюда laravel.com/docs/8.x/…
4. У меня есть модель для pivot, но какой код там должен быть?