Ответы пользователя по тегу Laravel
  • Как подгрузить разные формы в Blade Laravel?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    1. Vue. Можно вообще ничего не подгружать, а просто сделать динамическую форму, зависящую от select
    2. jQuery. Есть даже готовые плагины для создания зависимых форм.
    Ответ написан
    Комментировать
  • Зайти от админа в юзера и вернуться обратно, как?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Давайте поймем для чего вам это нужно... очевидно, чтобы увидеть какие-то документы этого пользователя (как бы от его лица), но почему бы админу просто не дать возможность смотреть документы пользователя?
    Понятно, что тогда нужно иметь возможность отделять одного пользователя от другого и их документы соответственно.

    Решить это можно если немного перестроить роуты. Вместо site.ru/posts и брать пользователя из auth, сделать site.ru/users/{id}/posts
    Ограничить доступ пользователя только к своим постам, а админу дать доступ к чужим очень легко с помощью модуля авторизации h-rbac. Мало того, не менее просто дать доступ менеджерам только к каким-то определенным пользователям или группам пользователей и их документам, причем, например, только документам определенного типа. Мне кажется этот вариант гораздо более гибкий.
    Ответ написан
  • Как в Laravel Faker добавлять не более 4 одинаковых значений в определенную таблицу?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    database/seeds/TeamSeeder.php
    factory(Team::class, 3)->create()->each(function($team) {
        $team->users()->saveMany(factory(Users::class, 5)->make());
    });
    // Roles
    $admin_ids = collect(range(1, Users::count()))->random(5)->toArray();
    Users::whereIn('id', $admin_ids)->update(['role' => 1]);

    Будет работать, если у вас для модели Team будет настроена связь hasMany с моделью Users.
    ЗЫ: Рекомендую применять стандарты Laravel:
    Users -> User
    id_team -> team_id
    Ответ написан
    1 комментарий
  • Как подсчитать отношения через отношение для многотабличной модели в Laravel?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Если вы запрашиваете данные, которые не собираетесь модифицировать, а только отображать, и тем более если у вас довольно сложный запрос, то не используйте модели - создайте запрос с помощью фасада DB.
    DB::table('some_table')->select(...)->join(...)->where() и так далее...
    Ответ написан
    Комментировать
  • Лучшее решение для генерации PDF/Word под Laravel?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Если вам нужен Word, то просто сохраните html с внедренными в документ стилями (есть возможность и начать абзац с новой страницы) с расширением .doc
    Word его прекрасно открывает.
    С pdf сложнее. Я пользуюсь laravel-dompdf. В целом нормально, но ожидаемая проблема - повернутый на 90 град. текст (нужно указывать высоту объекта).

    На самом деле все зависит от задачи. Спросите себя (заказчика): а нужен ли экспорт на самом деле? Дело в том, что на Win10 (ну а в линуксе уже очень давно) появился стандартный принтер в PDF. Печатать можно из любого приложения. Поэтому, если это укладывается в рамки задачи, то можно просто сгенерировать страницу и автоматически открыть диалог печати.
    Ответ написан
    Комментировать
  • Как вывести все поля в response?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Комментировать
  • When в mysql запросе laravel?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Мне кажется, у вас неверно спроектирована база. Где у вас текст сообщения? В отдельно таблице? В таком случае получается что диалог инициированный А к Б и наоборот Б к А - это разные диалоги, что в реальной жизни (месенджерах) не так.
    Ваша таблица должна иметь вид
    id | user_id | recipient_id | message | timestamp
    Это позволит вам простым способом выбрать все сообщения одного диалога, отсортировать их по времени и отобразить. Список собеседников тоже отобразить просто - это отношение многие-ко-многим между users и users (да, да!), где dialogs является pivot таблицей.
    Ответ написан
    Комментировать
  • Перевести mysql запрос в laravel?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Первая ссылка в гугле:
    https://www.itsolutionstuff.com/post/laravel-5-whe...
    Дока:
    https://laravel.com/docs/6.x/queries#where-exists-...

    PS: И, кстати, данный запрос можно легко переписать без всяких подзапросов с помощью простого left join
    Ответ написан
    Комментировать
  • Как убедиться, что суммарное кол-во вложенных ресурсов не превышает определенного кол-ва?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Не могу понять в чем смысл Location...
    Почему музеи и аукционы привязаны к городу? Т.е. если я нахожусь в Лондоне, то все лондонские музеи от меня на расстоянии 1,5 км что-ли? Если вам нужно расстояние до пользователя, так и храните свои координаты у каждого музея и аукциона. Сами аукционы и музеи лежат в одной таблице (название, тип, координаты). Различайте по типу. Если у них есть сильно отличающиеся поля, то можно их хранить в разных таблицах вот так: https://laravel.com/docs/6.x/eloquent-relationship...
    В таком случае простой пагинацией выводите хоть по 4, хоть по 10.
    Ответ написан
    Комментировать
  • Как сделать для View хэлпер или как вызвать там метод?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    @php
    @endphp
    Ответ написан
    Комментировать
  • Можно ли получить полноценную orm-структуру моделей через множественный JOIN?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Вам нужно сначала получить список id нужных документов в нужном порядке join'ами, а потом запросить уже модели, причем именно в этом порядке:
    $ids = \DB::table('documents')
       ->select(['documents.id'])
       ->join('templates', <тут связь>)
       ->orderBy('templates.field_order')
       ->pluck('id');
    
    $list = $ids->implode(',');
    $docs = Document::whereIn('id', $ids->toArray())
       ->orderByRaw("find_in_set(id, '$list')")
       ->get();
    Ответ написан
    Комментировать
  • Как реализовать и хранить наследумые объекты/модели?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Ваш вопрос - калька с уже заданного ранее. Реально они появляются примерно раз в месяц... ;)
    Мой ответ на него: Как лучше всего реализовать подобную архитектуру?
    Ответ написан
    Комментировать
  • Вывести список избранного?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    У вас сильно понапутано с отношениями...
    Начнем с того, что вы определили отношение один-к-одному, что есть глупость. Как минимум вам нужно hasMany.
    Ну а вообще-то, у вас классическое отношение многие-ко-многим (пользователи-статьи), где "избранное" является промежуточной таблицей (и, кстати, не понимаю зачем вам поле type). Лара позволяет промежуточной сделать любую таблицу. В доках это хорошо описано.
    Удачи!
    Ответ написан
    Комментировать
  • Как лучше всего реализовать подобную архитектуру?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Сейчас делаю проект с аналогичной структурой.
    Путем проб и нескольких ошибок :) выяснил, что лучше всего делать так:
    1. Все поля всех ролей сваливаются в одну таблицу (одинаковые поля не дублируются) и делаются nullable
    а) либо в users (получается немного неряшливо);
    б) либо в profiles (отношение 1к1 с users), просто чтобы отделить котлеты от мух.
    2. В исходниках проверяются НЕ РОЛИ, а разрешения, причем на каждое свойство профиля (учеба, достижения) - свое разрешение.
    Это позволит вам в любой момент добавить разрешение, например, на "достижения" в роль клиенту и у него появятся соответствующие элементы форм, вьюх и т.д.

    Здесь тоже есть одна тонкость: если роль администратора позволяет ему редактировать чужие профили, то желательно показывать ему только те поля, которые разрешены конкретному пользователю (которого редактирует администратор). Это не является проблемой, если ваш модуль RBAC позволяет навешивать колбэки на проверку разрешений.
    Вот модуль с колбэками собственного производства: h-rbac
    И статья о нем: Laravel 5. Иерархический RBAC для самых маленьких
    Ответ написан
    Комментировать
  • Как организовать социальную аутентификацию через Socialite(Laravel)+JWTAuth+Vue.js без редиректа с API-сервера?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Работает у меня такая схема и в Ionic и в NativeScript.
    В общем схема везде одинаковая.
    Ionic:
    На Laravel нужен Socialite, на клиенте что-то в соответствии с фреймворком. Я использовал ng2-ui-auth. Еще вам нужно установить плагин InAppBrowser.
    Последовательность такая:
    1. В своем приложении вы жмете на кнопку "Войти через GitHub"
    2. Открывается InAppBrowser окно входа GitHub (в урле передается clientId вашего приложения и redirectUri, за это отвечает ng2-ui-auth).
    2а. Обратите внимание что redirectUri из запроса должен быть идентичен Authorization callback URL в настройках вашего приложения на сайте GitHub (Settings / Developer settings / OAuth Apps) и в случае Cordova должен быть равен "localhost:3000".
    3. GitHub авторизирует вас по логину/паролю, спросит разрешения передавать данные Приложению и редиректит страницу на redirectUri добавляя к нему токен.
    4. ng2-ui-auth перехватывает обращение к localhost:3000 (это делается с помощью JS, тут нет никакого локального сервера), достает токен и пересылает его на конечный url (указывается для каждого провайдера в настройках ng2-ui-auth).
    4а. Вот этот конечный url должен быть адресом вашего backend'а, а именно метода, который с помощью Socialite будет запрашивать данные пользователя у GitHub.
    5. С помощь Socialite вы получаете данные о пользователе у GitHub. Создаете пользователя в Laravel, если его нет, и делаете любые другие необходимы действия.
    6. Используя данные пользователя с помощью jwt-auth создаете jwt-токен и возвращаете его клиенту (в пункт 4).
    7. На клиенте запоминаете jwt-токен и тот факт, что пользователь аутентифицирован. Из ответа можете достать email (если вы его передали) и где-нибудь отобразить.
    Все!

    С NativeScript все абсолютно аналогично (там на клиенте я использую nativescript-oauth2) за исключением одного: в NS нет webview, поэтому перехват redirectUri выглядит по-другому:
    1. В Authorization callback URL на GitHub вы пишите что-то вроде blablabla://auth (вместо blablabla какая-то длинная уникальная строка - urlScheme).
    2. Эта urlScheme также пописывается в настройках nativescript-oauth2 и в App_Resources/Android/src/main/AndroidManifest.xml в виде intent-filter
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="blablabla" />
    </intent-filter>

    Приложение перехватывает обращение к этой уникальной urlScheme и дальше все продолжается согласно списка.
    Ответ написан
    1 комментарий
  • Отдельная папка в Controllers для каждой роли?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Вам нужно понять принцип использования ролей и разрешений. Возможно вам поможет эта статья:
    Laravel 5. Иерархический RBAC для самых маленьких
    Ответ написан
    Комментировать
  • Laravel. Авторизация, как правильно зарегистрировать права (Gate)?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Мне кажется, проблема в том, что вы пользуетесь Gate, а он предусматривает только разрешения, причем без ролей. Попробуйте мой модуль, он добавляет к Gate роли:
    Laravel 5. Иерархический RBAC для самых маленьких
    Ответ написан
    Комментировать
  • Laravel api auth?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Уважаемые отвечающие, не путайте аутентификацию и авторизацию!

    stepan-neretin7, для аутентификации на сервере удобно использовать JWT.
    Для авторизации (права/роли) я использую собственную библиотеку. Если вам не нужно хранить разрешения на сервере и менять роли онлайн, то можете тоже ее попробовать. Это надстройка над стандартными разрешениями Laravel.
    Модуль: https://github.com/dlnsk/h-rbac
    Статья на Хабре: Laravel 5. Иерархический RBAC для самых маленьких
    Ответ написан
    Комментировать
  • Как правильно организовать разработку на Laravel + Docker?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Поддерживаю Антона насчет https://laradock.io/
    Рекомендую посмотреть/клонировать мою ветку https://github.com/dlnsk/laradock/tree/laradock_cl... (она не очень свежая). Я там сделал простенькую консольную утилиту, которая существенно упрощает запуск artisan, npm и др. в контейнере. Создал PR, но ребята что-то не чешутся (решили на Go переписать, но так ничего и не сделали), а я сижу и не жужжу... ;)
    Ответ написан
    Комментировать