Laravel Eloquent - как получить только 2 дочерних от каждого родителя с помощью Eloquent? - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу получить категорию только с 2 подкатегориями, а не со всеми подкатегориями. Как показано ниже:

Category 1
  subcategory 1, 
  subcategory 2,
Category 2
  subcategory 1,
  subcategory 2, 
Category 3
  subcategory 1,
  subcategory 2

Всего 5 категорий и в каждой категории 5 подкатегорий

Категория. php

class Category extends Model {
    public function subcategory(){
        return $this->hasMany('App\Subcategory');
    }

    public function limitSubcategory(){
        return $this->hasMany('App\Subcategory')->limit(2);
    }
}

Подкатегория. php

class Subcategory extends Model {
    public function category(){
        return $this->belongsTo('App\Category');
    }
}

HomeController. php

Метод 1:

Category::with(['limitSubcategory' => function($query) {

}])->get();

Метод 2:

Category::with(['subcategory' => function($query) {
   $query->limit(2);
}])->get();

Но он получает только 2 подкатегории в первой категории.

Нажмите здесь, чтобы посмотреть вывод

Пожалуйста, помогите мне, Как получить?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

вы можете использовать черту: HasEagerLimit:

вы можете установить ее:

composer require staudenmeir/eloquent-eager-limit:"^1.0"

, а затем в вашей модели:

class Category extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

    public function subcategory(){
        return $this->hasMany('App\Subcategory');
    }

public function limitSubcategory(){
    return $this->hasMany('App\Subcategory')->limit(2);
}
}

, а также в подкатегории модель:

class Category extends Model {
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

сейчас: когда вы загружаете ваше отношение ... оно должно вернуть желаемый результат:

$results=Category::with('limitSubcategory')->get();

подробнее в: https://github.com/staudenmeir/eloquent-eager-limit

0 голосов
/ 24 апреля 2020

В вашем контроллере, когда вы получаете такую ​​категорию $categ = Category::all(), вы можете иметь свой ограниченный список с $categ->limit_subcategory

Если вы хотите оптимизировать запрос с энергичной загрузкой и не иметь проблемы N + 1 в sql запрос, который вы можете сделать $categ = Category::whth(['limitSubcategory']->get()

Прочтите эту часть документации для получения дополнительной информации о быстрой загрузке https://laravel.com/docs/7.x/eloquent-relationships#eager -загрузка

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