Как объединить 2 объекта в Laravel и Vue. Js - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь создать простое приложение CRUD в Laravel + Vue. JS (Vuex также) И у меня небольшая проблема В чем проблема, на самом деле у меня есть таблица «категории» Структура этой таблицы вы можете см. на скриншоте

enter image description here И я создал 2 тестовых строки, которые вы можете увидеть на скриншоте. Как я могу вставить заголовок вместо значения parent_id Если parent_id имеет значение, аналогичное тому, которое кто-то идентифицирует, я попробую v-for в Vue Componetn и v-if Но у меня нет результатов Это мой код:

 <tr v-for="(category, $index) in categories" :key="category.id">
                                        <td>{{$index + 1}}</td>
                                        <td>{{category.title}}</td>
                                        <td v-if="category.parent_id === null">Category</td>
                                        <td v-else>SubCategory</td>
                                        <td>{{category.created_at | moment("DD, MMMM, YYYY")}}</td>
                                        <td></td>
                                    </tr>

enter image description here

Это мой данные, которые я получаю от контроллера

enter image description here

В любом случае спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Это код контроллера

public function index()
{
    $result = ['success' => true];

    $category = Category::paginate(15);
    $result['category'] = $category->items();
    $result['pagination']['currentPage'] = $category->currentPage();
    $result['pagination']['total'] = $category->total();
    $result['pagination']['perPage'] = $category->perPage();
    return response()->json($result, 200);
}

А вот как я хочу, чтобы он был enter image description here

Я думаю, что функция рендеринга и обработки массива должна быть на Vue Компонент

Это код модели моей категории

 public function products()
{
    return $this->hasMany('App/Products');
}

public function parent()
{
    return $this->hasOne(Category::class,'id','parent_id');
}
0 голосов
/ 29 марта 2020

Решением будет определение отношения hasOne как

public function parent()
{
    return $this->hasOne(Category::class,'id','parent_id');
}

И затем вы можете определить ресурс, где вы можете претендовать на звание родителя, используя определенное отношение, как показано ниже

$this->parent->title

Создать свой ресурс используя команду

php artisan make:resource CategoryResource

Тогда в вашем контроллере вы должны использовать ресурс

use App\Http\Resources\CategoryResource;

и в рамках действия контроллера предоставьте ответ, подобный

$categories = Category::paginate(15);
return CategoryResource::collection($results); // instead of response()->json($categories , 200);

И пример того, как ваш ресурс должен выглядеть

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class CategoryResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'parent_id' => $this->parent_id,
            'parent_title' => $this->parent->title,
             ...
        ];
    }
}

Информация о ресурсах, которые вы можете найти https://laravel.com/docs/5.8/eloquent-resources

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...