Laravel: три таблицы со связями для получения данных - PullRequest
0 голосов
/ 01 мая 2018

В моем приложении 3 таблицы. products, category, attributes Продукт имеет много категорий и категорий имеет много атрибутов.

Я хочу получить все products с Category деталями и catgoey attributes подробно в формате json. Как я могу это сделать?

В настоящее время я пытаюсь использовать эту функцию в моем контроллере:

public function index()
{
    $productDetails = Product::all();
    if(!empty($productDetails)) {
        foreach ($productDetails as $key => $value) {
            //print_r($value->id."</br>");
        }
    }
}

Вывод, который я хочу:

       {
       "productInformation": {
            "id": 1,
            "name": "productone",
            "status": "Active",
            "CategoryDetails": [
                {
                    "id": 1,
                    "product_id": 1,
                    "categoryTitle": "categoryone",
                    "attribute" : [
                        {
                            "id": 1,
                            "product_id": 1,
                            "category_id": 1,
                            "title": "attrib-title-one",
                        },          
                        {
                            "id": 2,
                            "product_id": 1,
                            "category_id": 1,
                            "title": "attrib-title-two",
                        },
                    ]
                }
            ]
        }
    }

отношение:

Вкл. categories Стол

$table->foreign('product_id')->references('id')->on('products');

Вкл. attributes Таблица:

 $table->foreign('product_id')->references('id')->on('products');
 $table->foreign('category_id')->references('id')->on('categories');

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Ваш Модель продукта

public function categories(){
return $this->hasMany('App\Category','product_id');
}

Категория Модель

public function attributes(){
return $this->hasMany('App\Attribute','cat_id');
}

В вашем контроллере

public function index()
{
    $productDetails = Product::with('catgories.attributes')->get();
    if(!empty($productDetails)) {
        $jsonData = json_encode($productDetails->toArray());
    }
}
0 голосов
/ 01 мая 2018

Вы можете определить ваши отношения внутри моделей для разных категорий и атрибутов, необходимо определить отношение hasMany в продуктах Модель для категорий (именованные категории), а затем другую модель hasMany в категориях (именованные атрибуты) для атрибутов. После этого вы можете выполнить этот процесс для подготовки массива данных

$productDetails = Product::all();
    if(!empty($productDetails)) {
        foreach ($productDetails as $key => $value) {  
            $productDetails[$key]['categorieDetails'] = $productDetails[$key]->categories;
         foreach ($productDetails[$key]['categorieDetails'] as $key2 => $value2) {  
            $productDetails[$key]['categorieDetails'][$key2]['
             attribute'] = $productDetails[$key]->categorieDetails[$key2]->attributes;

         }
        }

    }

Затем вы можете использовать json_encode для создания ваших данных json

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