• Как получить индекс ENUM в Yii2?

    qonand
    @qonand
    Software Engineer
    Подскажите пожалуйста как получить индекс ENUM

    Индекс ENUM можно получить только на уровне базы данных, например для MySQL этом можно сделать так:
    SELECT enum_col+0 FROM mytable

    Другой вопрос зачем Вам этот индекс? ENUM предназначается как раз для избежания работы с индексами. Как сказал Максим Тимофеев возможно действительно ENUM в Вашей задаче не уместно использовать и лучше использовать интовый тип данных?
    Ответ написан
    Комментировать
  • Ошибка в yii2 migrate. Как решить?

    qonand
    @qonand
    Software Engineer
    Ошибка 2002 говорит о том что приложению не удалось подключиться к базе дынных. Проверяйте настройки приложения отвечающего за миграции
    Ответ написан
    Комментировать
  • Yii2, валидация, не использовать правило при использовании сценария?

    qonand
    @qonand
    Software Engineer
    для указания сценария к которому не должно применять правило валидации - необходимо задать его имя в параметре правила except, например:
    [['phone', 'email'], 'required', 'except' => self::SCENARIO_DEFAULT],
    Ответ написан
  • Как правильно отпавить сформированый json?

    qonand
    @qonand
    Software Engineer
    но мне кажется что от этого кода несколько пованивает говно кодом (ну не нравиться мне передавать json в value, inputа). Есть лучшие практики как это сделать ?

    откровенно говоря попахивает. Уж лучше перехватите отправку формы, добавьте к ней необходимые параметры и отправьте POST на уровне JS
    Ответ написан
  • Нужен ли слой с бизнес логикой?

    qonand
    @qonand
    Software Engineer
    Полностью согласен с Толстый Лорри и Arkadiy Parinov, от себя хотелось бы добавить
    Планировалось использовать все эти модули в проекте с API, а всю логику прописывать в контроллерах. Хорошая ли это идея?

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

    Нужно ли выносить бизнес-логику в отдельные проект или нет - зависит от того будет ли необходимо ее использование в других проектах или нет. Но вот изолировать слой бизнес-логики от UI-слоя и слоя доступа данных стоит однозначно
    Если создать отдельный проект для БЛ, то как быть с моделями? Получается, что будут модели БД, модели бизнес логики и модели, которые я буду отдавать/получать от пользователя в API.

    Почитайте про разбитие приложение на слои, DDD и эти вопросы отпадут сами по себе.
    Ответ написан
    Комментировать
  • Можно ли из Url убрать параметр?

    qonand
    @qonand
    Software Engineer
    Если бы у Вас id было статичным (не изменяемым) тогда Вашу задачу можно было бы решить с помощью правил url-менеджера. Но с учетом того что id может меняться - url-менеджер Вам никак не поможет, он может убрать id из ссылки, но при переходе на нее Вы никак не сможете получить get-параметр, потому что его на клиентской части просто не будет. Соответственно нужно использовать POST как сказал Arik или вообще отказаться от идеи с скрытием параметра
    Ответ написан
    Комментировать
  • Как без перезагрузки вывести внутри блока другую страницу?

    qonand
    @qonand
    Software Engineer
    Вы обращаетесь к несуществующей странице - и это не удивительно. Вы должны создать метод в каком-нибудь контроллере, который будет с помощью renderPartial или renderAjax осуществлять отрисовку Вашего блока. В Ajax соответственно необходимо указывать ссылку на этот метод
    Ответ написан
  • Как при отправке в бд дату преобразовывать в формат strtotime?

    qonand
    @qonand
    Software Engineer
    используйте параметр timestampAttribute в DateValidator
    Ответ написан
    Комментировать
  • Как вытащить id последней записи или узнать с каким id создастся юзер, Yii2?

    qonand
    @qonand
    Software Engineer
    Если Вам необходимо получить идентификатор записи до ее сохранения в базу данных - тогда стоит отказываться от автоинкремета идентификатора (насколько я понимаю у Вас сейчас как раз он и используется) и делать вычисление идентификатора на стороне приложения, либо же сначала сохранять пользователя, а потом получать его идентификатор.
    Ответ написан
    Комментировать
  • Как избавиться от distinct?

    qonand
    @qonand
    Software Engineer
    Чтобы убрать дубликаты TableA нужно использовать distinct, который начинает сильно тормозить запрос при

    Что у Вас за дубликаты? помоему Вы что-то не так делаете, или не так понимаете....
    Ответ написан
    Комментировать
  • Как запустить cron на beget.com?

    qonand
    @qonand
    Software Engineer
    Проблемы в том что Вы используете контроллеры наследуемые от yii\web\Controller которые не подходят для консольных приложений, т.к. они созданы исключительно для приложений имеющих веб-интерфейс. Для решения проблемы Вам необходимо исправить эту ошибку
    Ответ написан
  • Как при нажатии на кнопку выполнить SQL запрос?

    qonand
    @qonand
    Software Engineer
    Можна ли это сделать через Ajax, и безопасно ли ето вообще (читал где то что так могуть украсть даные с БД).

    Безопасность это вопрос не столько Ajax, сколько того как Вы обрабатываете сам запрос

    Или може есть способ проще?

    Все зависит от Вашей задачи, в общем случае Вам нужно послать запрос на Backend и уже там выполнять необходимый запрос к базе данных. Если Вам нужно послать запрос без перезагрузки страницы - тогда да, нужно использовать Ajax

    Если это в любом случае надо делать через Ajax, можете мне обяснить как ето сделать пожалуйста.

    В интернете полно информации как работать с Ajax, поэтому лучше погуглите и найдите подходящую для себя информацию. Как вариант можете рассмотреть вот это
    Ответ написан
    Комментировать
  • Как получить значения всех полей из БД в связанных таблицах?

    qonand
    @qonand
    Software Engineer
    если правильно понял проблему, тогда так:
    ArrayHelper::map($array, 'id', function ($element){
        return $element['name']. ' ' . $element['paramName'];
    });
    Ответ написан
    1 комментарий
  • Можно ли расширить fk в Mysql?

    qonand
    @qonand
    Software Engineer
    При выборке используются еще несколько параметров, можно ли данный fk расширить или нужно делать отдельный индекс по нужным колонкам?

    Добавляйте отдельный индекс. Для лучшего понимания как работают индексы в MySQL рекомендую почитать вот эту статью
    Ответ написан
    Комментировать
  • Валидация через через "each" в yii2?

    qonand
    @qonand
    Software Engineer
    Маловероятно что валидация не отрабатывает если все правильно сделано. Валидация может не отрабатывать только в следующих случаях:
    1. Вы не загружаете данные атрибута из запроса в модель (не мешало бы показать контроллер где это происходит)
    2. У Вас срабатывает клиентская валидация или аякс-валидация на других полях до отправки формы на сервер, соответственно each-валидация не срабатывает.
    Не мешало что бы Вы показали полностью код формы.

    А вообще судя по коду Вы изобретаете велосипед. Для решения Вашей задачи проще использовать готовое решение, например это
    Ответ написан
  • Путь к ИТ архитектору?

    qonand
    @qonand
    Software Engineer
    Доброго времени суток. Я junior web developer. В данный момент пишу на php. Хочу спросить совета у опытных людей, как начинать двигаться в сторону ИТ архитектор

    Рановато двигаться в сторону архитектора, Вы лучше двигайтесь в сторону Senior Developer и задавайтесь вопросом как Вам дойти до уровня Senior, а уже после достижения этой планки Вы сами поймете как развиться в архитектора.
    Ответ написан
    Комментировать
  • Почему не работает код?

    qonand
    @qonand
    Software Engineer
    Не работает потому что:
    1. Нельзя переопределять константы объявленные в интерфейсе
    2. Нельзя переопределять сигнатуру методов объявленных в интерфейсе, т.е. если Вы в интерфейсе объявили метод setVariable($var) то и в классах реализовывающих интерфейс должен быть точно такой же метод с точно такими же параметрами
    3. Класс должен реализовывать все МЕТОДЫ объявленные в интерфейсе, у Вас же метод getHtml($template) в классе BadTemplate не определен

    Вы бы почитали что такое интерфейсы и как с ними работать
    Ответ написан
    Комментировать
  • Как сгенерировать список свободных логинов, предлагаемых пользователю при регистрации?

    qonand
    @qonand
    Software Engineer
    собственно в чем вопрос?

    Данные которые должны учитываться - фамилия, имя, дата рождения и введенный пользователем логин (он считается уже занятым)

    на стороне php - генерируете массив возможных вариантов на основе этих данных, потом проверяете что из этого массива есть в базе с помощью запроса в стиле
    SELECT * FROM users WHERE login IN ('login1', 'login2', 'login3')
    Ответ написан
    Комментировать
  • Как выбрать с помощью DISTINCT в yii2 (AR)?

    qonand
    @qonand
    Software Engineer
    при такой выборе я получаю только уникальные строки в БД с полями sender_id и recipient_id, но там ведь есть еще другие поля.

    Distinct не возвращает уникальные СТРОКИ, он возвращает уникальные ЗНАЧЕНИЕ указанных столбцов, в Вашем случае - уникальные сочетания значений sender_id и recipient_id.

    И вообще таких парных строк может быть неограниченное количество. Так вот, можно ли как то задать distinct таким образом, чтобы такие парные строки считались за одну?

    Вы бы лучше описали какую задачу хотите решить и какая структура БД, а то складывается ощущение что Вы вообще не с того краю подходите к ее решению. Вы пытаетесь вывести список собеседников пользователя? или что?

    UPD по результатам обсуждения: Вашу задачу можно решить в самом простом варианте так:
    $expression = new \yii\db\Expression('id IN (SELECT MAX(id) FROM messages WHERE `sender_id` = :user_id OR `recipient_id` = :user_id, GROUP BY IF (`sender_id` = :user_id, `recipient_id`, `sender_id`))',[':user_id' => 3]);
    $models = Messages::find()->where($expression);


    Но вообще я думаю имеет смысл создать отдельную таблицу, хранящую информацию о диалогах
    Ответ написан
  • Как наложить картинку на картинку png в php?

    qonand
    @qonand
    Software Engineer
    Если правильно понял проблему:
    imagealphablending($png1, false)
    imagealphablending($png2, false);

    Вы выключили режим сопряжения цветов ... а он то как раз и нужен
    Ответ написан
    Комментировать