Связь "многие ко многим" с fk в сводной таблице

у меня следующая структура:

База данных

ингредиенты
id,
название

продукты
id,
название

ингредиент_продукт
ингредиент_id,
product_id,
ингредиент_типа_ид

ингредиенты_типы
id,
название

Модели

Модель Продукт

class Product extends Model
{
    public function ingredients() {
        return $this->belongsToMany(Ingredient::class)
            ->withPivot('ingredient_type_id');
    }
}

Ингредиент Модель

class Ingredient extends Model
{
    public function products() {
        return $this->belongsToMany(Product::class)
            ->withPivot('ingredient_type_id');
    }
}

Мой SearchController

class SearchController extends Controller
{
    public function search(InitialSearchRequest $request)
    {
        $productsResults = Product::where('name', 'LIKE', '%' . $request['initial-search'] . '%')
            ->with('ingredients', 'brand')
            ->get();

        return view('search.index')
            ->with(compact('productsResults'))
            ->with('initial-search', $request['initial-search']);

    }
}

И наконец мой Вид

<div class = "card-group">
    @foreach($productsResults as $product)
        <div class = "col-sm-6 col-md-4 col-lg-4">
            <div class = "card"><img class = "card-img-top" src = "..." alt = "Imagem do produto" style = "width: 100%; height:100px; background-color: #696969;">
                <div class = "card-body">
                    <h5 class = "card-title">{{ $product->name }}</h5>
                    <p class = "card-text">
                        Important Ingredients: <br>
                        @foreach($product->ingredients as $ingredient)
                            **{{ I need here the ingredient type }}** - {{ $ingredient->name }}
                        @endforeach
                    </p>
                </div>
            </div>
        </div>
    @endforeach
</div>

Поэтому мне нужно показать в обзоре свои продукты с ингредиентами и типом каждого ингредиента.

Этот подход не работает ......

Мне нужна помощь, чтобы закончить эту задачу.

Спасибо за любую помощь.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
29
1

Ответы 1

Вы можете использовать сводную модель:

class IngredientProductPivot extends \Illuminate\Database\Eloquent\Relations\Pivot
{
    public function ingredientType() {
        return $this->belongsTo(IngredientType::class);
    }
}

class Product extends Model
{
    public function ingredients() {
        return $this->belongsToMany(Ingredient::class)
            ->withPivot('ingredient_type_id')
            ->using(IngredientProductPivot::class);
    }
}

Затем получите доступ к нему следующим образом:

{{ $ingredient->pivot->ingredientType->name }}

Насколько мне известно, нет возможности загрузить отношение type.

Другие вопросы по теме