2015-01-06 6 views
2

У меня есть три таблицы Categories, Websites, CategorywebsitesКак получить рекурсивные данные таблицы в Laravel

Категория таблица имеет поля:

id | parent_id | name 

таблица Сайт имеет поля:

id | name 

В таблице категорииwebsites есть поля:

id | website_id | category_id 

Я хотел бы получить родительские категории с их дочерними категориями и их соответствующими категориями, а затем их сведениями о веб-сайтах, соответствующими категорииwebsites в одном массиве.

Я определил отношения в категории модели

public function categories(){ 
return $this->hasMany('Category','parent_id','id'); 
} 

// To get categories website linked to category. 
public function categorywebsites(){ 
    return $this->hasMany('Categorywebsite'); 
} 

public function websites(){ 
    return $this->belongsToMany('Website'); 
} 

Я использую этот код, чтобы извлечь все данные в иерархии, но я получаю

Array(
    [0] => Array 
    (
     [id] => 1 
     [parent_id] => 0 
     [cat_name] => Search Engine 
     [categories] => Array 
      ([0] => Array([id] => 6 
         [parent_id] => 1 
         [cat_name] => PPC 
         [websites] => Array 
          ([0] => Array(
             [id] => 1 
             [website_id] => 1 
             [category_id] => 6 
            )[1] => Array 
            ([id] => 2 
            [website_id] => 2 
            [category_id] => 6 
            )[2] => Array 
            (
             [id] => 3 
             [website_id] => 3 
             [category_id] => 6 
            ) 
           ) 
           ) 

Первый мой мотив также получить веб-сайт подробно с subarray categrywebsites.I хотел бы получить данные, используя один запрос. Этот процесс делает систему медленной.

Любая помощь приветствуется

Заранее спасибо

ответ

0

Если действие чтения к базе данных происходит медленно, просто добавить -> помните (5) к вашему SQL заявление, где 5 означает помнить результат выбора на 5 минут. Конечно, предполагается, что контент вашей категории не будет меняться постоянно. Кэширование контента значительно улучшит производительность.

Что касается других вопросов, я не понимаю, чего вы хотите. Возможно, вы можете вставить подмассиву, который вам нужен, поэтому я могу помочь вам построить точный оператор sql.

Надеюсь, это поможет.