Laravel по-русски

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

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

#1 Re: Laravel 5.x » Eloquent, Relationships, Left Join » 09.01.2020 17:02:01

Я так понимаю, большого смысла работать с отношениями в Eloquent нет. Разве что некоторые запросы будут короче и для информативности в моделях указывать связи?

#2 Laravel 5.x » Eloquent, Relationships, Left Join » 09.01.2020 14:31:38

chelovek
Ответов: 3

Всем привет. Никак в документации не могу найти решение по поводу внешнего объединения. Допустим есть 2 сущности, со связью ManyToMany:

Class Foo extends Model
{
  public function bars()
  {
        return $this->belongsToMany(Bar::class);
  }
}

Class Bar extends Model
{
  public function foos()
  {
        return $this->belongsToMany(Foo::class);
  }
}

Данный запрос делает внутреннее объединение:

App\Foo::find(1)->bars()->get();

Можно ли используя отношения в Eloquent сделать такого типа запрос?

SELECT * FROM foos f LEFT JOIN bar_foo bf ON bf.foo_id = f.id WHERE f.id = 1;

#3 Re: Laravel 5.x » Повторное использование Form на нескольких страницах » 07.01.2020 17:01:32

Как насчет такого подхода?
Создаем базовый шаблон формы

//views/components/form/template.blade.php
{{ Form::open(['url' => $action]) }}
   {{ Form::label('title', 'Название') }}
   {{ Form::text('title', null) }}
   <br>
   {{ Form::label('description', 'Описание') }}
   {{ Form::text('description', null) }}
   <br>
   {{ Form::label('text', 'Текст') }}
   {{ Form::textarea('text', null) }}
   <br>
   {{ $other_fields }}
   <br>
   {{ Form::submit('Отправить') }}
{{ Form::close() }}

На конкретных страницах вызываем этот шаблон и передаем ей нужные значения

// page-create.blade.php
@component('components.form.template', ['action' => app()->url('page-create')])
   @slot('other_fields')
      {{ Form::label('parent_id', 'Родитель') }}
      {{ Form::text('parent_id', null) }}
      <br>
      {{ Form::label('type', 'Тип страницы') }}
      {{ Form::text('type', null) }}
   @endslot
@endcomponent

// article-create.blade.php
@component('components.form.template', ['action' => app()->url('article-create')])
   @slot('other_fields')
      {{ Form::label('category_id', 'Категория') }}
      {{ Form::text('category_id', null) }}
   @endslot
@endcomponent

// category-create.blade.php
@component('components.form.template', ['action' => app()->url('category-create')])
   @slot('other_fields')
      {{ Form::label('parent_id', 'Родитель') }}
      {{ Form::text('parent_id', null) }}
   @endslot
@endcomponent

#4 Laravel 5.x » Повторное использование Form на нескольких страницах » 07.01.2020 12:01:25

chelovek
Ответов: 4

Всем привет, подскажите пожалуйста, как вы решаете ситуацию, когда одна форма подходит для нескольких страниц? Допустим есть 3 таблицы:

pages
 id, title, description, text, parent_id, type

articles
 id, title, description, text, category_id

categories
 id, title, description, text, parent_id

Как видим, формы для редактирования и создания записей в этих таблицах совпадают, за небольшим исключением. Т.е смысла для каждой таблицы создавать новую форму нет. Можно создать 1 форму с полями id, title, description, text и на странице подключения формы добавлять недостающие поля и action.

Как это сделать я понимаю, но меня интересует именно Laravel Best Practices, чтобы не создавать костыли. Я изучаю этот фреймворк буквально 2 дня и со всеми нюансами еще не знаком. Спасибо заранее.

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