Задать вопрос
  • Как игнорировать файл из внешнего git репозитория?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Делайте так, как делают все - храните в репозитории шаблон конфига (config.example.php), а сам конфиг поместите в игнор.
    ЗЫ: Анатолий в комментариях написал именно про это.
    Ответ написан
    Комментировать
  • 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
    Ответ написан
    Комментировать
  • Как осуществить поиск по Regex?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    \b305\b
    Ответ написан
    Комментировать
  • Как убедиться, что суммарное кол-во вложенных ресурсов не превышает определенного кол-ва?

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

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    1. Никак
    2. Сделать git rebase -i <номер коммита>
    Ответ написан
    Комментировать
  • Как мне настроить работу с git для prod и dev сайта?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    В git нужно хранить конфиги по-умолчанию, а реальные конфиги, перекрывающие умолчания, не должны храниться в гит. В этом случае на dev у вас будут одни конфиги, а на prod другие и ничто не помешает вам просто сделать git pull в продакшине (продакшин продакшину рознь, естественно, и не везде можно обойтись без CI/CD).
    Ответ написан
    Комментировать
  • Как сделать для View хэлпер или как вызвать там метод?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    @php
    @endphp
    Ответ написан
    Комментировать
  • Почему гугл не индексирует компоненты VUE?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    А чего вы, собственно, хотели? Боты - они же простые как три рубля. Их задача быстренько индексировать страницу. Представьте сколько нужно ресурсов, чтобы исполнять JS на каждой странице... Да и зачем? Если разработчику нужно индексировать Vue, то он потратит на это свои ресурсы.
    То, о чем вы пишите, называется SSR. Не знаю в каких таких "статьях" вы читали про гугл, но есть официальная дока про SSR на сайте Vue:
    https://ssr.vuejs.org/ru/
    Ответ написан
    Комментировать
  • Можно ли получить полноценную 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
    Ваш вопрос - калька с уже заданного ранее. Реально они появляются примерно раз в месяц... ;)
    Мой ответ на него: Как лучше всего реализовать подобную архитектуру?
    Ответ написан
    Комментировать
  • Как привести локальный git репозиторий в соответствии с удаленным?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Достаточно просто создать временную ветку на конце той, которую вы собираетесь исправлять
    git checkout branch_name
    git checkout -b temp

    После этого можете делать с branch_name все что угодно. temp не даст коммитам пропасть. Ну а потом git cherry-pick всего, что нужно в исправленную ветку или в любую другую.
    Ответ написан
    Комментировать
  • Комит при изменении даты на локальном компе на 2 дня назад. Какие последствия?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Вы видимо один работаете над проектом?
    Сделайте rebase (описание процесса), а потом
    git push -f
    Ответ написан
    Комментировать
  • Как браузер резолвит домен?

    dlnsk
    @dlnsk
    ПК Партнер 01.01 -> ПК Поиск -> IBM PC
    Вас интересует архитектура браузера? Ну так она, видимо, в каждом разная...
    Ответ на все ваши "думаю" и "где-нибудь" в исходниках:
    https://github.com/chromium/chromium
    Ответ написан
  • Вывести список избранного?

    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 для самых маленьких
    Ответ написан
    Комментировать