Как мне использовать Eloquent для получения всех связей из промежуточной таблицы?

#php #laravel #eloquent

#php #laravel #eloquent

Вопрос:

У меня много отношений ко многим, например:

 // Category Model
class Category extends Model
{
    public function sections()
    {
        return $this->belongsToMany('AppSection');
    }
}

// Section Model
class Section extends Model
{
    public function categories()
    {
        return $this->belongsToMany('AppCategory');
    }
}
  

Допустим, у меня есть следующие отношения категории / раздела со следующими слагами:

 domestic
    dogs
    cats
    birds
zoo
    cats
    birds
winged
    birds
  

Есть ли красноречивый или простой способ перечислить все разделы с их категорией?

Чтобы представить это в контексте, если у category и section был slug, основываясь на моем примере, я хотел бы получить список разделов, подобных этому:

 domestic/dogs
domestic/cats
domestic/birds
zoo/cats
zoo/birds
winged/birds
  

Я пытался создать сводную модель, расширив класс Pivot, но не могу с этим справиться.

Любая помощь с благодарностью.

Ответ №1:

Что-то вроде этого может помочь:

 // Retrieve all categories
$categories = Category::with('sections')->all();

// Define result array
$result = [];

foreach ($categories as $category) {
    foreach ($category->sections as $section) {
        $result[] = $category->slug . '/' . $section->slug;
    }
}

// Result now holds the contents you are looking for
  

Комментарии:

1. Спасибо @Maarten Veerman. Да, это помогает. Хотя я надеялся на решение Eloquent. Что-то менее обременительное для большой базы данных.