• Как подключить mysql и mongodb базы данных в yii2 одновремено?

    Steein
    @Steein
    Программист
    'components' => [
        'dbMySQL' => [
            'class' => '\yii\db\Connection',
            'dsn' => 'mysql:...',
            'username' => '...',
            'password' => '...',
            'charset' => 'utf8',
        ],
        'dbMongo' => [
            'class' => '\yii\mongodb\Connection',
            'dsn' => 'mongodb://...',
        ],
    ],


    Yii::$app->dbMySQL->...
    Yii::$app->dbMongo->...


    Не забудьте переопределить getDb() в \yii\db\ActiveRecord и \yii\mongodb\ActiveRecord классов, чтобы указать на эти компоненты, если вы используете ActiveRecords.
    Ответ написан
    9 комментариев
  • Переход из 1С в web-разработчики (PHP ) в 35 лет. С чего начать и реально ли?

    @4iloveg
    Full-Stack HTML Developer
    https://laracasts.com/skills/laravel не смотря что на английском - посмотри "step one" просто что бы понять как можно программировать на php. Посмотрев уроки ты осознаешь что с ларавел твой код будет понятным и красивым. Это даст понять что нужно обязательно осваивать фреймворки, ведь без них ты будешь городить велосипеды вместо того что бы решать конкретные задачи.
    Останется только подтянуть уровень знаний.
    www.ozon.ru/context/detail/id/137538198 вот хорошая книга, я сейчас ее читаю, там начинается с основ.
    Ответ написан
    Комментировать
  • Паттерны проектирования?

    @vkdv
    Паттерны - это реальные инструменты, позволяющие добиться реализации концепции объектно-ориентированного проектирования и принципов SOLID

    Ссылка на SOLID

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

    Один из наиболее часто встречающихся мне примеров, это пример принципа "Принцип открытости/закрытости" , когда класс - описывающий некую сущность(например модель комментария) , описывает только свои базовые назначения( создание, удаление, редактирование), при этом такие механизмы, как модерация, прикрепление файлов, лайки , реализуется другими классами и "прикручиваются" к классу моделей через интерфейсы и наследование/ трейты / примеси

    При этом :
    1) Никак не изменяется код класса "Комментарий" (кроме подключения интерфейса) и в будущем мы добавляем поведения без изменения класса + стабильность системы, гибкость
    2) Каждый класс имеет свое четкое назначение + легкость модификации, порядок
    3) Комментарии наследуют некоторое поведение, путем подключения поведения, но также могут поступать любые другие классы - сущности (посты, блоги итп) , то есть интерфейс и реализация лайков универсальна, и весь функционал работы лайков находится только (строго!!!) в одном месте + легкость модификации, Универсальность, стабильность, интуитивная понятность

    Из википедии :

    Признаки плохого проекта
    Закрепощённость: система с трудом поддается изменениям, поскольку любое минимальное изменение вызывает эффект "снежного кома", затрагивающего другие компоненты системы.
    Неустойчивость: в результате осуществляемых изменений система разрушается в тех местах, которые не имеют прямого отношения к непосредственно изменяемому компоненту.
    Неподвижность: достаточно трудно разделить систему на компоненты, которые могли бы повторно использоваться в других системах.
    Вязкость: сделать что-то правильно намного сложнее, чем выполнить какие-либо некорректные действия.
    Неоправданная сложность: проект включает инфраструктуру, применение которой не влечёт непосредственной выгоды.
    Неопределенность: проект трудно читать и понимать. Недостаточно четко выражено содержимое проекта.

    Оттуда же про SOLID

    Избавиться от "признаков плохого проекта"[4] помогают следующие пять принципов SOLID:

    Принцип единственной ответственности (The Single Responsibility Principle)
    Существует лишь одна причина, приводящая к появлению класса.

    Принцип открытости/закрытости (The Open Closed Principle)
    «программные сущности … должны быть открыты для расширения, но закрыты для модификации.»

    Принцип подстановки Барбары Лисков (The Liskov Substitution Principle)
    «объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.»

    Принцип разделения интерфейса (The Interface Segregation Principle)
    «много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.»

    Принцип инверсии зависимостей (The Dependency Inversion Principle)
    «Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»
    Ответ написан
    2 комментария
  • Не работает Emmet в Sublime 3. Как побороть?

    @konkore
    Добрый день.

    Столкнулся с подобной проблемой, решил её так:

    SublimeText/Preferences/Package Settings/Emmet/Key Bindings - User/ в открывшемся файле вставляете например после
    { "keys": ["tab"], "command": "commit_completion", "context":
    [
    { "key": "auto_complete_visible" },
    { "key": "setting.auto_complete_commit_on_tab" }
    ]
    },
    этот код команды: https://gist.github.com/iledcom/3d92f0a75b90a49afa...

    Подобное описано у Suinly Suinly
    Ответ написан
    1 комментарий
  • Идентифицирующая или неидентифицирующая связь?

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

    Хороший пример - сущность "элемент заказа" (OrderItem). Не может быть элемента заказа без самого заказа. Поэтому идентифицирующая связь из отношения "заказ" (Order) отлично тут подойдет. Если у заказа первичный ключ Id, то первичный ключом OrderItem будет, к примеру, такая пара: (OrderId, Number), где OrderId - внешний ключ в таблицу заказов, добавленный идентифицирующей связью, а Number - номер элемента заказа (строки в чеке, если так понятнее), позволяющий иметь несколько заказанных товаров в одном заказе.

    Неидентифицирующая связь, соответственно, НЕ добавляет колонки внешнего ключа в первичный ключ. Соответственно, значение внешнего ключа при неидентифицирующей связи может быть как NULL, так и NOT NULL.
    Ответ написан
    1 комментарий
  • Как создать связь многие ко многим в phpMyadmin?

    @AVKor
    1. phpMyAdmin не является программой для построения модели.
    2. Связь "многие ко многим" в реляционной модели данных реализуется через таблицу пересечений.
    Ответ написан
    Комментировать
  • Как создать связь многие ко многим в phpMyadmin?

    27cm
    @27cm
    TODO: Написать статус
    Связь "многие-ко-многим" в MySQL реализуется через промежуточную таблицу.

    Классический пример:
    У нас есть две сущности (таблицы): авторы и книги. У каждого автора может быть несколько написанных книг, а книга может иметь нескольких авторов. Чтобы связать таблицу авторов (authors) с таблицей книг (books) создаётся дополнительная таблица authors_books, каждая запись (строка) которой содержит идентификатор автора и идентификатор книги.

    authors:
    id_author | name
    -------------------------
       1      | Иванов И. И.
       2      | Петров П. П.
       3      | Сидоров С. С.


    books:
    id_book | title
    -------------------------
       1    | Учебник MySQL
       2    | Учебник PHP


    authors_books:
    id_author | id_book
    ------------------------
       1      |   1
       2      |   1
       2      |   2
       3      |   2


    Таким образом мы храним две книги:
    1. "Учебник MySQL", Иванов И. И., Петров П. П.
    2. "Учебник PHP", Петров П. П., Сидоров С. С.
    Ответ написан
    Комментировать
  • С чего начать изучение Yii2?

    konofeev
    @konofeev
    Программист
    Переведенная документация. Не знаю, только в какой объёме её перевели.
    Ответ написан
    Комментировать
  • MySQL - выборка из таблицы многие ко многим

    @nmike
    SELECT mags.*, COUNT(*) AS c
    FROM mag_tov, tovs, mags
    WHERE mt_tov_id = tov_id AND mt_mag_id = mag_id
    AND tov_name IN ("ПЕРЕЧИСЛИТЕ_ЧТО_ХОТИТЕ")
    GROUP BY mag_id
    HAVING c = КОЛЛИЧЕСТВО_ТОГО_ЧТО_ХОТИИТЕ

    если надо 'молоко', 'мясо' и 'чай'

    то
    SELECT mags.*, COUNT(*) AS c
    FROM mag_tov, tovs, mags
    WHERE mt_tov_id = tov_id AND mt_mag_id = mag_id
    AND tov_name IN ('молоко', 'мясо' и 'чай')
    GROUP BY mag_id
    HAVING c = 3


    просто вложенные запросы в мускуле очень большое зло.
    Ответ написан
    2 комментария