Laravel по-русски

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

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

#1 Re: Laravel 5.x » Заливать проект laravel на хостинг через git » 23.09.2019 17:58:08

Ты вообще знаешь для чего папка vendor?
У тебя в репе должны быть файлы composer.json и composer.lock. Они однозначно указывают какие пакеты должны быть установлены по команде composer install. А значит просто незачем добавлять в репу стопицот миллионов чужих файлов. Твоя репа для твоих файлов only. smile

#2 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 13:57:55

Ты так и не сказал какая была цель. А мог бы получить подсказку.
Например: хотим вывести все поля таблицы Users(id, name, age, salary) + количество записей, совпадающих с текущим пользователем по возрасту. Или давай максимальную зарплату людей того же возраста. Похоже на твою невозможную группировку, да? smile

Можно решить с под-запросом:

SELECT 
  u.id, 
  u.name, 
  u.age, 
  (SELECT MAX(salary) FROM users WHERE age = u.age) AS max_salary
FROM 
  users AS u

Так должно работать. Этот запрос можно ещё переписать через JOIN, суть не поменяется.



Вот именно тут мне придётся часть функционала выборки из sql перенести на php, так как на sql я не могу выбрать всё, сортируя по двум полям. Придётся выбрать всё, а на пхп подсчитать схожие записи.

ой *ля-а-а-а-а! привыкнешь к такому и всё, ты умер как разработчик.

#3 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 13:27:08

Отменить ONLY_FULL_GROUP_BY или использовать ANY_VALUE() ? Ну если тебя устраивает такое "решение"...
Сервер MySQL ты победишь, но логику нет smile Мне кажется ты занимаешься самообманом. Однажды ты увидишь, что получил не то, что хотел.

It really should be called SURPRISE_ME()

big_smile

#4 Re: Laravel 5.x » Subquery в join » 12.09.2019 13:19:46

Я согласен с тем что бывает удобнее несколько запросов чем один. Но данный пример я не знаю как переписать ни в один, ни в несколько запросов чтобы не было очевидного бестолкового оверхеда. PHP не должен брать на себя функцию сервера БД.

Продублировал вопрос на laracast в предельно упрощённом виде, может там подскажут.

#5 Re: Laravel 5.x » Subquery в join » 12.09.2019 12:13:49

То, что данный отчёт получается сложным не означает, что нужно рефакторить всё к чёртовой бабушке чтобы оно гладко описывалось через has smile

Здесь загвоздка скорее в ограниченных возможностях Eloquent, а не в плохой модели. Eloquent это надстройка над или пре-компилятор SQL. Он по определению не может дать больше, чем даёт SQL. Хотя некоторые типовые действия выглядят в нём удобно.

Всё же я надеюсь, что удастся найти хороший перевод.

#6 Re: Laravel 5.x » Polymorphic Relationships » 12.09.2019 12:04:19

Сразу вопрос: это реалезуемо в Laravel?

Laravel может работать со всеми вариантами отношений, которые ты перечислил. Так что да. Если ты можешь это выразить в терминах реляционной базы, то это реализуемо на Laravel.

Т.е. полиморфные связи и одновременно один ко одному и один ко многим.

По-моему это чушь. Надо переосмыслить какие реально нужны связи.
Мне кажется ты упустил такой момент, что есть наименование (или тип) товара и есть единица хранения товара - штука, упаковка и т.п. Единиц одного наименования может быть много и они могут быть разложены по ячейкам. Не наименование товара раскладывается, а экземпляр.

Видимо, отношение экземпляра к ячейке один-к-одному. Возможно полиморфиный, я не уверен. Я бы пытался сделать просто с минимальным набором сущностей, и только когда не получается просто, тогда усложнять.

Наименование товара к экземплярам товара относится как один-ко-многим.

Тип расходник/оборудование можно описать булевым или enum полем в таблице наименований. Свойства товара разместить в одной "широкой" таблице с nullable полями на все случаи жизни. Я не вижу здесь жёсткого требования заводить по отдельной таблице на каждую разновидность товара. Можно да, но можно и нет. big_smile

#7 Re: Laravel 5.x » Группировка в запросе. Непонятно. » 12.09.2019 11:42:24

То есть что бы все поля вывести, мне их нужно все заталкать в groupBy.

Нет. Если ты все поля затолкаешь в group by, то группировка потеряет смысл. Это правило абсолютно логично, надо только его понять и принять.

Есть хороший пример: допустим у нас есть таблица людей с именами, возрастом и размером зарплаты. Допустим мы группируем по возрасту, что мы можем получить на выходе кроме возраста?
Имя - нет! Потому что может быть несколько человек одного возраста, непонятно какое имя брать из этих нескольких.
Зарплата - нет! По той же причине.
НО мы можем получить максимальную или среднюю зарплату по возрасту. То есть применить агрегатную функцию к полям, которые НЕ входят в список группировки. Понимаешь?
Допустим ты "выкрутишься" как собирался здесь, группируя и по возрасту, и по имени, и по зарплате. Что получишь на выходе? Да просто исходную таблицу smile

Итак, что ты хочешь получить, своими словами, и почему взялся группировать?

#8 Re: Laravel 5.x » Subquery в join » 10.09.2019 22:13:51

Запрос на сыром SQL работает как надо. Не хочется в Laravel писать всё через DB::RAW() это как-то неэстетично.

Колдунство с
JOIN xxx ON id = SELECT MIN(id) FROM xxx WHERE fk_id = yyy.id
понадобилось так как надо прицепить первую из нескольких подходящих записей.

Тому гуру Eloquent кто осилит перевод, от меня будет огромный респект!

#9 Laravel 5.x » Subquery в join » 10.09.2019 22:08:37

doublevas
Ответов: 7

Помогите выразить на Query Builder без RAW, но через joinSub или подобный механизм вот такой непростой запрос:

SELECT
  SUM(w.weight) AS weight
FROM container AS c
JOIN weight AS w ON w.id = ( -- First weight
	SELECT MIN(id) FROM weight WHERE container_id = c.id
)
LEFT JOIN container_run AS cr ON cr.id = ( -- First link to process if any
	SELECT MIN(id) FROM container_run WHERE container_id = c.id
)
WHERE 
  cr.type = 1 OR cr.type IS NULL

#11 Re: Общий раздел » Ребят, помогите с устанокой Laravel на OpenServer » 03.09.2019 21:53:13

Видимо тем 5 человекам, кто читает, описанная проблема не близка.
Лично я не понял что тебе мешает прочитать текст предупреждения и сделать что написано. Оно ведь написано. smile

#12 Laravel 5.x » Nova: получить значение применённого фильтра » 30.08.2019 19:00:14

doublevas
Ответов: 0

Пишу свой кастомный экшен под Laravel Nova. Это экспорт по шаблону в PDF. Понадобилось узнать по какому занчению отфильтрованы записи чтобы отобразить это значение в документе. Кто-нибудь знает как его добыть? Как вариант, фильтр может быть сброшен.
Буду благодарен за подсказку.

#13 Re: Laravel 5.x » Как в контроллере прописать параметры для шаблонизатора » 26.08.2019 19:25:15

Шаблон расширяется @extends('main'), внутри которого есть переменные, например {{$title}}

Из документации:

@extends('layouts.app')

@section('title', 'Page Title')

а в лейауте эту секцию выводишь через @yield.

В доке не нашел, но будет работать и передача через параметры.
Здесь синтаксис @extends такой же точно также как в @include

@extends('master', ['title' => $title])

после чего переменная $title будет определена в master.blade.php

#14 Re: Laravel 5.x » Валидация и вывод ошибок как массив. » 25.08.2019 13:11:58

Как мне отойти от стандартов, не отходя от стандартов? smile

Проверь себя: в шаблоне выведи "сырое" содержимое переменной с ошибками:

 @if ($errors->any())
    @php(dd($errors))
 @endif

может быть всё, что ты хочешь тебе и так доступно, надо только правильно обратиться.

#15 Re: Laravel 5.x » Не работает запрос, вывводит ошибку TokenMismatchException in compi... » 25.08.2019 13:05:05

На самом деле надо было не отказываться от посредника CSRF, а добавить в форму поле с токеном, чтобы посредник мог его использовать. Если внезапно и это не поможет, значит проблема в сессии, потому что для проверки токена нужна сессия. Без сессии вам вообще ВСЁ придется поотключать smile

Короче, старайтесь придерживаться стандартных путей, а не громоздить костыли. Отступать от шаблонов могут только гуру 80-го уровня.

#17 Re: Laravel 5.x » Вызов одного контроллера из другого для генерации шапки сайта » 14.08.2019 22:31:15

Не надо тебе обращаться к другому контроллеру. Всё делается на уровне шаблонов.

То что ты просишь делается через "наследование шаблонов". Не знаю зачем так назвали, на наследование в ООП это не похоже. smile
В команде @extends указываешь где находятся твои шапка и попка. То, что надо туда передать для вывода обрамляешь в блоки @section или @stack
Чтобы постоянно не передавать одни и те же "глобальные" параметры в каждый вызов, описываешь их один раз во View Composers

Всё нормально описано в офф. доках.
https://laravel.ru/docs/v5/blade
https://laravel.com/docs/5.8/views#view-composers

#18 Re: Laravel 5.x » Непонятки с throttle... » 07.08.2019 12:59:46

5.8 наверное тоже поможет, потому что там интервалы в секундах выражаются и ты внезапно ничего не меняя получишь меньший таймаут )))

#19 Re: Laravel 5.x » Непонятки с throttle... » 07.08.2019 12:58:12

все больше и больше увеличивать таймаут

Скорее ты ошибаешься, чем бага smile логично было бы наоборот увеличивать число попыток, а не таймаут (таймаут это время за которое можно совершить N попыток. чем время больше, тем правило строже).

Вроде троттл через кэш реализован. Ты с кэшем ничего не делал?

#20 Re: Laravel 5.x » как записать в базу в одно поле таблицы несколько перемен » 07.08.2019 12:48:22

Правильный ответ: а не надо всё в одно поле, РСУБД работают со связанными данными. Типа есть запись в таблице Заказы и есть связанные с ней записи в таблице Строки заказа.

Неправильный ответ: ты можешь сериализовать данные и сохранить их в текстовом поле. Начиная с какой-то версии MySQL поддерживает поле типа JSON. Ещё раз: это костыль, а не решение. Так делают те, кто в SQL не шарит и не хочет в этом признаваться.

#21 Re: Laravel 5.x » Доступ к View вне Контроллеров » 07.08.2019 12:34:07

то если упаковываешь строку return view('album.album'); в метод этого же контроллера допустим getView();и вызываешь в индексном методе $this->getView() то вывода в браузере нет (пустой экран).

return возвращает значение, в данном случае - объект типа вью.

надо не просто вызвать свой кастомный метод, но и потом вернуть то, что он тебе дал smile

в методе-экшене контроллера, т.е. например в

public function index()
{
$view = $this->getView(); // а он делает return view(...)
...
return $view;
}

#22 Re: Laravel 5 » Laravel 5 как в редакторе сделать внешнюю ссылку » 03.08.2019 10:52:46

@arh198712 в каком редакторе, где получается? нифига не понятно.
покажи как выглядит твой код, который рождает неправильную ссылку. наверное там есть что-то лишнее.

#23 Re: Laravel 5.x » Подмена user » 03.08.2019 10:49:35

Похоже тебе нужен механизм "имперсонализации", так это называется по науке.
например вот такое нагугливается: https://pineco.de/impersonating-users/

#24 Re: Laravel 5.x » Авторизация на Laravel через сторонние API » 18.07.2019 11:22:27

Не очень понятно о чём ты спрашиваешь. Давай начнём с терминов и потом, надеюсь, станет ясно куда двигаться:

Во первых, давай уточним, речь про авторизацию или аутентификацию. Это не одно и то же, хотя связано.
https://ru.wikipedia.org/wiki/%D0%90%D0 … 0%B8%D1%8F

Во вторых есть описание авторизации через сессию и через токен. Для этого в Laravel есть разные гайды и мидлвары.
https://laravel.ru/docs/v5/authorization
https://laravel.ru/docs/v5/authentication

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