Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (42)

Лучшие ответы пользователя

Все ответы (33)
  • Почему angularjs уделяют так много внимания?

    @jacob1237
    Потому что его пиарит Google.
    Внутри ничего сверхъестественного нет, обычный two-way data binding и свой собственный шаблонизатор, который является основой фреймворка и фактически заставляет вас писать логику приложения в шаблоне.
    Ответ написан
    Комментировать
  • Дерево категорий Laravel. Как уменьшить количество запросов в БД?

    @jacob1237
    Если используете PostgreSQL, посмотрите в сторону рекурсивных подзапросов.

    Если это не PostgreSQL, то можете попробовать строить дерево из "сырых данных" непосредственно в PHP (как подсказывает Вам ThunderCat ).

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

    Таких основных моделей четыре: Adjacency list, Nested Sets, Materialized Path и Closure Tables (можно рассматривать как развитие Adjacency List) плюс их вариации.

    Каждый тип модели может послужить для оптимизации выборки данных из древовидных структур в БД.

    Присутствуют готовые библиотеки и для Laravel:
    Nested Set
    Closure Tables

    Для Adjacency List (вашей текущей реализации), просто сортируйте данные самостоятельно, либо попробуйте этот пакет.
    Ответ написан
    3 комментария
  • VirtualBox. Как настроить доступ к SSH серверу, запущенном на гостевой ОС?

    @jacob1237
    Можно просто пробросить 22 порт из виртуалки на localhost (гугл virtualbox port forwarding). После таких манипуляций сможете подключаться к SSH серверу по IP адресу Вашего реального компьютера, но соединение будет перебрасываться в виртуалку.

    Вот здесь можно подглядеть: stackoverflow.com/questions/9537751/virtualbox-por...
    Ваш случай - "Host -> Guest"
    Ответ написан
    Комментировать
  • Правильно ли я понимаю суть программирования?

    @jacob1237
    Формат интерпретации данных и их кодирование в памяти, а также список команд, которые способен исполнить процессор, предопределены производителем CPU и описаны в Instruction Set Architecture процессора?


    Да, все верно понимаете. Производители процессоров конечно пытаются стандартизировать свои архитектуры, но все равно остаются ньюансы как у AMD, так и у Intel (если рассматривать только ПК).

    Пример документации от Интел: https://software.intel.com/en-us/articles/intel-sdm

    В целом для ПК (именно для ПК) существуют некий стандарт x86, а также его расширение x86-64. Именно он описывает набор доступных программисту инструкций, флагов и ячеек данных (регистров).
    В рамках этого стандарта каждая инструкция имеет свой опкод.

    Т.е. после компиляции программы в машинный код (двоичную последовательность), опкоды команд будут одинаковы для всех x86-совместимых процессоров (т.е. компиляция идет не под отдельный процессор, а под архитектуру, а самих архитектур много, x86, ARM и т.д.).
    Это дает возможность запускать программы с одинаковым результатом как на процессорах Intel, так и на AMD.

    Программирование — умение кодировать алгоритмы, предназначенные для исполнения процессором, на языке, синтаксис которого, в конечном счёте - после стадий трансляции символьных масок в последовательность электрических сигналов, предназначен для понимания процессором


    Если рассматривать только сам процесс кодирования, то примерно так и есть.
    Но сейчас под термином "программирование" подразумевается нечто большее чем простой набор инструкций с клавиатуры.
    Программирование - прикладная наука. Без предметной области программирование не существует в принципе.
    И именно предметная область зачастую определяет каким будет язык и инфраструктура.

    От программиста требуется не только забить алгоритм и откомпилировать исходник, но и зачастую этот алгоритм сначала придумать/скомбинировать. Без знания предметной области этого сделать опять же не получится, либо получится, но малоэффективно.

    Вам точно не в "web-dev"..
    P.s уж слишком низко полезли. У нас же всё в абстракциях :D

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

    Это может быть потребность написать свой модуль для PHP, Python, JavaScript (Node.js), либо реализовать программный интерфейс к внешним приложениям/системам.

    К сожалению такие задачи не покрываются программистами другой специальности, например системщиками - т.к. они как правило пишут очень низкоуровневые вещи: драйверы устройств, модули ядра ОС и т.д. поэтому веб-разработчикам очень желательно это уметь делать.

    В 90% задач конечно это не нужно (особенно где надо "натягивать верстку на движок" =D), но если хотите расти как профессионал и покрывать весь спектр возможных задач в вебе, то это, как говорится, must have.
    Ответ написан
    Комментировать
  • Как реализовывать наследование моделей в laravel?

    @jacob1237
    То что Вы пытаетесь реализовать, называется наследованием таблиц (Table Inheritance) - это такой способ эмулировать наследование классов в реляционных СУБД.

    Всего существует несколько известных вариантов решения такой проблемы, например Single Table Inheritance и Class Table Inheritance (это если не учитывать нативную поддержку подобных вещей в некоторых СУБД, например PostgreSQL).

    Полиморфные же связи (которые по-дефолту в Laravel) - это не очень хороший способ реализации, потому что не позволяет поддерживать целостность связей на уровне СУБД. Однако можно использовать и его, если Вам эта целостность не очень важна (ее надо будет поддерживать на уровне приложения).

    К сожалению Eloquent не поддерживает ни Single Table Inheritance, ни Class Table Inheritance (зато их поддерживает Doctrine из Symfony), поэтому придется писать вручную.

    Прежде чем это делать, я бы Вам посоветовал разобраться как Profile относится к User и OrgAdmin.
    Является ли Profile подвидом пользователя (из названия честно говоря не понял), или же это просто набор дополнительных полей, которые можно оформить в виде связей?

    Если и Profile и OrgAdmin - это подвиды (подтипы) пользователей со своим собственным набором полей, то Вам нужно добавить в общую таблицу отдельное поле type (это называется дискриминатор), в котором у Вас будет проставлен тип пользователя. Например 1 для User, 2 для Profile и 3 для OrgAdmin.
    Короче очень похоже на стандартный Polymorphic Relationships из Laravel.

    А потом переопределяете у модели User функции newFromBuilder() или newInstance() в которых Вы укажете какие классы моделей создавать для конкретного type. Вот например статья.

    Дальше для Class Table Inheritance можно в трейт поместить функцию сохранения и родителя и потомка, потому что сохранять их придется вместе (на уровне БД), в зависимости от измененных свойств. Кроме того, нужно будет позаботиться об отображении (mapping) атрибутов родителя на потомков (__set и __get), на случай если вдруг захочется делать вот так (представьте что атрибут name принадлежит родителю - модели User):
    $profile = new Profile();
    $profile->name = 'John Doe';
    $profile->save();


    Короче это гемор в Laravel. Поэтому перед тем как делать, подумайте можно ли решить задачу проще - например через Single Table Inheritance, поместив все атрибуты в одну таблицу, либо делайте через стандартные полиморфные связи.

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

    Погуглите по указанным ключевым словам (паттернам), может что уже появилось для Laravel.
    Ответ написан
    3 комментария

Лучшие вопросы пользователя

Все вопросы (2)