Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (16)

Лучшие ответы пользователя

Все ответы (55)
  • Как сформировать запрос, используя Eloquent ORM?

    @jazzus
    Так, а документацию посмотреть?)) Про белонгстумени
    Запись в сводной таблице методoм attach()
    Например:
    $book->authors()->attach($author_id);
    Запрос конкретной книги с авторами
    $book=Book::with('authors')
                      ->withCount('authors')
                      ->find($id);

    Или все книги с авторами
    $books=Book::with('authors')
                        ->withCount('authors')
                        ->get();

    потом можно
    dd($book);
    и увидеть, что добавились авторы и количество авторов.
    В шаблоне
    @foreach ($books as $book)
              //количество авторов у книги
              {{$book->authors_count}}
              //имена авторов
              @foreach ($book->authors as $author)
                {{ $author->name }}
              @endforeach
          @endforeach

    Для авторов аналогично.
    Ответ написан
  • Каким образом сделать связи между четырьмя и одним изначально не существующим объектом?

    @jazzus
    Как бы не хотелось сейчас создать 3 таблицы для одинаковых сущностей – не делайте этого. Совет от новичка) Потом замучаетесь рефакторить, а рефакторить структуру бд – это все сносить и делать заново. И вы будете это делать. Потому что юзеры в разных таблицах принесут вам проблемы.

    Нужно сделать модели (таблицы)
    User (все пользователи)
    Role (именование ролей – учителя, ученики и т.д.)
    UserRole (с полями user_id и role_id)

    User связывается с Role через ManyToMany
    В модели user
    public function roles()
        {
          return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
        }

    В модели Role

    public function users() {
            return $this->belongsToMany('App\User', 'user_roles', 'role_id', 'user_id');
          }

    Можно проще записать но лучше так. Теперь у вас есть связь между ролями и юзерами через промежуточную таблицу 'user_roles'. Почему именно так:
    1) У вас будет одна таблица вместо 10 для любых изменений, связанных с пользователями. Например, добавить новое поле, изменить поле ит.д. Вы это будете делать 1 раз, а не 10, исключая ошибки человеческого фактора
    2) Вы захотите добавить правила доступа. А для этого нужна будет еще одна таблица Perm. Которая будет привязана к ролям. И сделать это будет легко и просто в данной структуре и права доступа вы потом будете менять в несколько кликов.
    3) С несколькими таблицами юзеров у вас будет запутанная раздутая логика со множеством моделей, переменными , вы замучаете ларавелю, запутаетесь сами и снесете все нафиг.

    Ладно, модели создали)) Теперь при регистрации добавим роль пользователю. Допустим учитель регистрируется и выбрает себе роль учитель (пускай будет чекбокс с полем role где value это ид роли).

    В контроллере регистрации (если стандартном ларавелевском) идете в метод
    protected function create(array $data)

    и пишете после создания юзера

    $user->roles()->attach($data['role']);
    После чего у вас автоматом создастся запись в промежуточной таблице и юзеру будет присвоена роль учителя. Готово. Теперь вы можете делать все что угодно.

    Например
    получить пользователей указанной роли в контроллере

    $teachers = Role::find(3)->users()->get();
    Правильно написал? только цифры нужно поменять на константы и вообще лушче сразу в модели написать один метод для получения юзеров любых ролей (подставлять название константы роли через переменную) – но это ладно, потом просто передалть. На этом все) Только после создания ролей можно приступать к группам и это уже нужно выносить в отдельный вопрос.
    Ответ написан
  • “Мягкое” удаление связей многие-ко-многим в Laravel - как реализовать грамотно?

    @jazzus
    В Pivot таблице можно сделать поле Active true/false. У меня так реализована деактивация ролей пользователя c возможностью их восстановления, отображения истории и т.д.
    $user->roles()->updateExistingPivot($id, ['active' => false]);
    Ответ написан
  • Почему потерялась модель на продакшене?

    @jazzus Автор вопроса
    Ошибка в регистре написания (буква L) - оказывается для unix это критично
    Ответ написан
  • Какой уровень математики необходим для работы с машинным обучением?

    @jazzus
    Как почти профессиональный программист я вам отвечу:
    1. Математика программисту необходима
    2. Без математики программист не сможет мыслить математически, создавать сложные взаимосвязные формулы, не только видеть числа, но и смотреть, что ЗА ними. Без математики вы станете еще одним программистом, не знающим математику.. Оно вам надо?
    3. Хотите быть программистом, учитесь считать.
    Вот такие 4 пункта я вам предложу, но выбор за вами.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (65)