Laravel eloquent получает предметы, относящиеся к определенной категории - PullRequest
0 голосов
/ 03 октября 2018

У меня есть следующая структура таблицы

таблицы

 tbl_items
   id
   sub_category_id //foreign key

таблицы подкатегорий

  tbl_subcategories
     id
     category_id
     name

категории таблицы

   tbl_categories
      id
       name

Как вы можетесм. выше, sub_category_id - это внешний ключ в таблице продуктов, который относится к идентификатору в таблице подкатегорий.таблица подкатегорий имеет category_id, который является внешним ключом из таблицы категорий

Теперь я хотел получить все элементы, принадлежащие к определенной категории.

, поэтому я попытался

$categories = Categories::where('id',7)->first();
//from categories get subcategoryid
$allsubcategories = Subcategories::where('category_id',$categories->id)->pluck('id')


$allitems = Items::where('status',1)->wherein('sub_category_id',$allsubcategories)

Выше работает.но есть ли более аккуратный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

определяет отношение hasManyThrough в модели Category к модели Item.

// on the Category Model
public function items() {
    return $this->hasManyThrough(Items::class, Subcategories::class);
}

, тогда вы можете получить доступ ко всем items принадлежащим конкретному category

// On your Controller
$category = Categories::where('id',7)->first();
$items = $category->items

официальная документация - https://laravel.com/docs/5.7/eloquent-relationships#has-many-through

0 голосов
/ 03 октября 2018

Что ж, вы, вероятно, можете попробовать использовать Nested Eager Loading, что должно быть немного более эффективным:

//Assuming the relationships are named subCategories() on Categories model & items() on Subcategories model
$cat = Categories::where('id', 7)
           ->with('subCategories.items')
           ->get()
           ->first();

Это должно загрузить категорию со всеми подкатегориями и всеми элементами в каждой подкатегории с наименьшимколичество запросов.

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