За последние 24 часа нас посетили 17943 программиста и 1574 робота. Сейчас ищут 1294 программиста ...

Хорошие практики Laravel

Тема в разделе "Laravel", создана пользователем Alexey Mezenin, 7 ноя 2017.

  1. Alexey Mezenin

    Alexey Mezenin Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    17
    Симпатии:
    2
    Ты не ответил. Вопрос звучит как "В чем конкретно преимущество использования репозитория при работе с Eloquent?". Есть класс User, есть класс UserRepository. В чем преимущество использования лишней абстракции в виде класса UserRepository:

    Код (Text):
    1. return User::with('articles')->get();
    Перед вызовом метода модели:

    Код (Text):
    1. return $this->with('articles')->get;
    Ты совсем не видишь разницы между count() коллекции и count() Query Builder'а? Ты неправ и всеми силами пытаешься унизить снисходительным тоном и прочей демагогией и пр., лишь бы не признать этого.
    --- Добавлено ---
    Эго задел? Пусть будет уборщик.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну Алексей, я тебе тоже пытаюсь объяснить. Ну откуда-то в коллекции должны взяться элементы, чтоб она их могла посчитать, найти минимум, максимум или ещё что-то? Если они изначально в базе лежат, то в коллекцию их надо загрузить, а Eloquent в конце концов транслируется в SQL.
     
    artoodetoo нравится это.
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    А ты не сумел простой, реально очень простой SQL запрос, выразить на AR. 1:1 :D


    Разница в том, что я и не пытался утверждать, что А лучше Б. Я утверждал: А не является Б.

    > Демагогия — набор ораторских и полемических приёмов и средств, позволяющих ввести аудиторию в заблуждение и склонить её на свою сторону, с помощью ложных теоретических рассуждений, основанных на логических ошибках (софизмах).

    И вообще, вопросы здесь задаю я :D Ты опубликовал здесь ссылку саморекламного характера, так будь добр защищать её ценность.
    --- Добавлено ---
    Я должен признать свою ошибку: в первом в своём каменте я писал "автор намеренно составил корявый SQL запрос". Сейчас я верю, что это было сделано ненамеренно. Извини!
     
    #28 artoodetoo, 14 ноя 2017
    Последнее редактирование: 14 ноя 2017
  4. Alexey Mezenin

    Alexey Mezenin Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    17
    Симпатии:
    2
    Я это понимаю прекрасно, я там гружу аппойнтменты для каждого менеджера. Но я же несколько раз озвучил бизнес задачу для своего кода и предложил придумать реальную бизнес задачу, чтобы написать Eloquent и SQL запросы для нее. Но вон artoodetoo до сих пор тычет мордой в тот запрос, не имеющий ничего обего с решением реальных бизнес задач.

    Сейчас же мы говорим о 1 + N*3 и N+1.

    @artoodetoo с тобой все понятно, ты пришел с phpклаба и сеешь тот же навоз здесь. Можешь удалить тему, бог тем. Я почти уверен, что переживу это. Адекватный человек в разговоре отвечает на вопросы и приводит аргументы, но не занимается тем, чем занимаешься ты.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    На phpclub мне самому прилетало по башке (но я зла не держу), так что я не оттуда.

    Ты в упор не видишь аргументов, хотя мы их уже несколько раз повторили, я уже не знаю что сказать. Злость мешает тебе думать, это печально.
     
    #30 artoodetoo, 14 ноя 2017
    Последнее редактирование: 15 ноя 2017
  6. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    ой, опять холивар развели на пустом месте.

    Всё это херня, господа. Главное в нашем деле - это заложить возможность горизонтального масштабирования в архитектуру приложения. Остальное - мелочи ))
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Брат, так вроде никто тебя не просил писать свою "бизнес задачу". Я тебя спросил сможешь ли ты адекватно переписать запрос SQL на Eloquent. Ведь ты защищаешь тезис, что хорошей практикой является именно ЭТО.
    --- Добавлено ---
    золотые слова! главное хайп, он хорошо продаётся.
     
  8. Alexey Mezenin

    Alexey Mezenin Новичок

    С нами с:
    27 апр 2016
    Сообщения:
    17
    Симпатии:
    2
    artoodetoo нравится это.
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    Вот за именование спасибо!
     
    #34 artoodetoo, 18 ноя 2017
    Последнее редактирование: 18 ноя 2017
  10. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Надеюсь автор ещё тут )

    В Laravel, вроде с 5.2 в Builder добавили метод cursor() возвращающий генератор, который можно итерировать для получения записей. Как известно, кроме того что он круто выглядит, он ещё и быстрее и экономнее к памяти. При этом упоминается он небольшим разделом в документации и во всяких best practices чуть более, чем ни разу.

    Код (Text):
    1.  Выборка всех записей, немного действий с ними, короче, все как обычно бывает.
    2. Машинка там очень слабенькая впска, с фоновыми тасками, удаленная, записи сами по себе большие, да ещё и под виндой всё, не прогрето ни разу, потому такие тайминги.
    3. Не суть, короче. Главное тут пропорции.
    4.  
    5. Всего записей: 17323
    6.  
    7. ->all()
    8. Память (разница): 20 971 520
    9. Время от старта: 0.26321697235107
    10.  
    11. ->chunk(3000)
    12. Память/пик (разница): 11 376 432
    13. Память (разница): 73232
    14. Время от старта: 0.30519890785217
    15.  
    16. ->cursor()
    17. Память (разница): 804 672
    18. Память/пик (разница): 812 936
    19. Время от старта: 0.23832893371582
     
    artoodetoo нравится это.
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    а можно по подробнее на пальцах?)