• Как лучше сократить метод, контроллера что бы его легче было тестировать?

    @jazzus
    Да-да валидация в отдельных файлах очень удобна
    php artisan make:request FileRequest
    и туда перенести правила и сообщения, а в контроллере подключить его через use и использовать в методе (FileRequest $request). Остальной код супер)) Можно еще добавить проверок переменных например if($relation)... и т.д. для исключения ошибок, добавить также права доступа к методу ну и конечно подключить выгрузку json для js
    Ответ написан
    Комментировать
  • Как создать запись в связующей таблице Laravel не обращаясь к ней?

    @jazzus Автор вопроса
    Итого:
    Laravel действительно имеет способы не обращаться к промежуточным таблицам.
    Если записи нет (например комментариев), то подойдет вариант, предложенный Koteezy

    $product->comments()->create(['a' => 'b'])

    В моем случае записи уже существовали и их нужно было только соединить поэтому подходит вариант attach
    $user->roles()->attach($roleId, ['expires' => $expires]);


    док по теме
    https://laravel.ru/docs/v5/eloquent-relationships
    Ответ написан
    Комментировать
  • Как реализовать индивидуальную страницу для каждого пользователя в Laravel?

    @jazzus
    Если в отношения пока не вникнуть, то есть максимально простой способ:
    1)В таблице tasks создать столбик user_id. Его желательно связать с users, но на начальных этапах лучше не забивать голову такими мелочами)) Все равно потом 10 раз потом все переделывать, сносить таблицы, все переименовывать, переписывать и т.д.
    2) Когда создаете task записываете в user_id =Auth::id();.
    $task=new Task;
    $task->user_id = Auth::id();
    $task->save();


    Зачем это? Чтобы получить id авторизованного в данный момент пользователя и тем самым прописать, что типа задача принадлежит ему.
    При этом нужно не забыть подключить фасад auth( use Auth в шапке контроллера над названием класса);
    3) Все задача привязана. Теперь нужно получить их.
    $tasks=Task::where('user_id',Auth::id())
                                          ->get();

    теперь в переменной $tasks будут задачи авторизованного в данный момент пользователя.
    4) Вам наверняка захочется их отсортировать, подсчитать количество и сделать пагинацию.
    Поэтому можно будет прописать
    $tasks=Task::where('user_id',Auth::id());
    $count = $tasks->count();
    $tasks=$tasks->orderBy('updated_at', 'desc')
                          ->paginate(20);

    Это задачи пользователя с сортировкой по дате изменения, количеством и по 20 записей на страницу.
    Ларавель пагинацию сделает автоматом. Вам нужно будет только разместить в шаблоне.
    {{ $tasks->links() }}
    Все можно запускать в продакшен
    Ответ написан
    Комментировать
  • Что лучше – дублировать запрос к базе или дублировать объект в методах Laravel?

    @jazzus Автор вопроса
    Да нет я не просто так делю) Здесь разделил из-за многократного применения этих методов в контроллерах. $product не только для поиска файлов. Он в шаблоне и контроллере используется. Поэтому нужно делить на методы/переменные. + проверить, что они существуют
    В данный момент там уже все переделал. file получаю в модели Product.
    public function superfile()  {  
    return $this->file()->where('type', 10);
    }


    и в контроллерах

    $superfile=$product->superfile();

    Сам вопрос уже понятен. metod($product) не дублирует объект, а ссылается на него. Я думал, что дублирует)
    Ответ написан
    Комментировать
  • Как синхронно отрисовать v-for внутри модального окна?

    @jazzus Автор вопроса
    По итогу в процессе обсуждения нашлись решения:

    1) Свойство activ, которое используется для открытия модалки передавать вместе с данными с сервера. Таким образом модалка не будет появляться раньше отрисовки списка и они будут отображаться синхронного. Минус данного велосипеда в задержке появления модалки пока данные не придут.

    2) Передавать уже сформированный массив данных от родителя. А если нужно изменить пропсы то делать запрос к родителю через this.$emit и уже в родителе менять нужные данные в массиве через vue.set

    3) Прятать загрузку данных за анимацией модалки.

    Я остановился на втором варианте. Спасибо Сергей delphinpro и Evgeny Kulakov за идеи
    Ответ написан
    Комментировать
  • Как убрать поля из Laravel Resource связанных отношений?

    @jazzus Автор вопроса
    Еще один вариант к варианту Kostik_1993 - это указывать в модели запрещенные к показу свойства protected $hidden. Пример:
    protected $hidden = [
             'updated_at', 'created_at', 'id'];

    Что скроет из всех json запросов указанные 3 свойства
    Ответ написан
    Комментировать
  • Как вызвать загрузку файла в Vue.JS?

    @jazzus Автор вопроса
    Возникла идея просто сформировать ссылку в шаблоне vue компонента. Которая будет также вызывать роут и загружать файл:

    <a v-bind:href="'/test/'+file.id+'/1/download'" class="btn btn-light btn-sm mr-1 mt-2">Скачать</a>


    Скорее всего это велосипед и есть нормальный способ вызывать загрузку файла.
    Ответ написан