Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Хорошие практики (FAQ) » Какая оптимальная схема должна быть для вариаций товаров и свойств » 26.02.2024 09:56:17

DmitriyLutsenko
Ответов: 1

Ребят, я для себя пилю пет-проект магазина на laravel 8.

И для себя я хочу выяснить, как правильно организовать БД для товаров и их вариаций, при том, что у меня будут кастомные атрибуты этих товаров/вариаций.

Вот моя схема, которую я планирую реализовать. Здесь я реализовываю паттерн/антипаттерн "EAV",
поскольку предполагается, что менеджер магазина сам будет решать, какие атрибуты добавлять к товару, а какие - удалять.

Screenshot-5.jpg

Такая схема нормальная или ее можно как-то доработать для улучшения производительности?
Товаров может быть около нескольких сотен с неизвестным набором параметров.

Если есть иные способы реализации гибкого управления динамическим набором параметров - я буду очень признателен за совет.

#3 Laravel 6/7/8/9/10 » Как из записи выбрать модель, которая вместе должна выводиться? » 10.10.2023 16:32:15

DmitriyLutsenko
Ответов: 1

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

Как мне из записи в основной таблицы выбрать, какой дополнительный компонент или какие дополнительные данные мне надо будет отображать. Есть какое-нибудь универсальное решение для этого?

Покажу такое решение, знаю, что оно тупое и блейд не умеет парсить x-теги, которые записаны в поле записи.
Какими путями я могу динамически выбрать, какую дополнительную модель можно вызвать?

Схема миграции Page:

 
public function up()
{
    Schema::create('pages', function (Blueprint $table) {
      $table->id();
      $table->string('title');
      $table->text('content')->nullable();
      $table->string('tagComponent')->nullable();
      $table->timestamps();
    });
}

Это шаблон страницы Page

@extends('layouts.app')

@section('content')

<h1>{{$page->title}}</h1>

<div class="container">
    <div class="content">
        {!! $page->content !!}
    </div>
{{-- <x-vacancy/> --}}
{{-- компонент успешно создан и выдает все записи из модели Vacancy, если вызвать его в любом месте верстки--}}
    <div>
       {!! $page->tagComponent !!} {{-- там выводится <x-vacancy/>, блейд его парсить не будет и выведет как есть --}}
    </div>
</div>
@endsection

Или вообще это все фигня, я все слишком усложняю и мне надо просто, грубо говоря,из записи в контроллере выдернуть поле tagComponent и проверять его значение в switch-case-default, который вернет шаблон с заранее определенным нужным компонентом?

Подвал раздела