• Как сверстать подобную форму поиска в Yii2 на Bootstrap?

    EagleMoor
    @EagleMoor
    PHP Yii2 RESTful API Developer
    Там же есть верстка ручками через html, а дальше уже делайте с ней что хотите!

    www.yiiframework.com/doc-2.0/guide-input-forms.html

    А при принятии

    actionSearch() {
      $form = new MyForm();
      $form->load($_POST); // or $form->load($_POST, '');  — в зависимости как параметры передавать будите
      if ($form->validate()) {
         ...
      }
    }
    Ответ написан
    Комментировать
  • Как объединить мало значащие сектора круговой диаграммы ExtJs в один "Прочее"?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    просуммировать значения ниже порогового - религия уже не позволяет?)
    Ответ написан
    5 комментариев
  • Как объективно протестировать производительность node.js и PHP в запросах к mysql БД?

    @fattan Автор вопроса
    программист
    Итак. Спасибо за ответы. Я понял в чем дело. Т.к. программирую на node.js аж целых 2 недели, я неверно трактовал результаты. Изменил тест, и вышло вот что:

    var start = new Date();
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '', 
      database : 'epr'
    });
    
    
    for (var i = 0; i < 1000; i++) {
    	connection.query(
    		'SELECT * FROM dreg_document', 
    		function(error, result, fields){
    			
    			var str = '';
    			
    			result.forEach(function(row){
    
    				str += ' ' + row.id + ' ';
    
    			});
    			console.log(str);
    		}
    	);
    }
    
    connection.end();
    
    var end = new Date();
    console.log('node.js %d мс', (end.getTime()-start.getTime()) / 1000);
    	
    client.send('qwerty');


    Если думать по php-шному, после отработки всех запросов, отправляется сообщение клиенту -
    client.send('qwerty');

    Но на деле, сообщение отправляется тогда когда node-server отправит к БД ВСЕ запросы. Затем (! не дожидаясь ответа от БД) сервак отправляет клиенту сообщение. Клиент (браузер) подсчитывает время (вышло, к примеру 2 секунды для 100 000 итераций). А в это время в ноду продолжают поступать ответы от БД. Эти ответы мы видим с помощью
    console.log(str);
    И тут уже получаются совсем другие результаты....

    Далее, изменяем скрипт следующим образом, чтобы подсчитать время выполнения от 1го до последнего асинхронного подключения к БД:
    // начало выполнения скрипта
    var start = new Date();
    // счетчик обращений к БД
    var ConnCountGlobal = 0;
    // Число обращений к БД
    var iLength         = 100;
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '', 
      database : 'epr'
    });
    
    for (var i = 0; i < iLength; i++) {
    	connection.query(
    		'SELECT * FROM dreg_document', 
    		function(error, result, fields){
    			
    			// для последнего запроса вычисляем таймер
    			if (ConnCountGlobal == iLength-1){
    			
    				var dateObj   = new Date();
    				var currTime  = dateObj.getTime();
    			
    				console.log(' node.js - %d мс', (currTime-start.getTime()) / 1000);
    			}
    
    			ConnCountGlobal++;
    		}
    	);
    }
    
    connection.end();


    Результат
    Для 100 итераций 2.5 сек (что в 15 раз медленнее чем на PHP)

    Промежуточный ответ на топик:
    Node.js не быстрее PHP в 150 раз в вопросе доступа к БД.
    Напротив, Node.js в этом плане в 15 раз медленнее чем PHP.
    (это если брать оба сервера "из коробки", без улучшательств и настроек)

    Новый вопрос:
    Верен ли мой последний тест? Или я в нём тоже что-то не так сделал?
    Ответ написан
    9 комментариев
  • Как объективно протестировать производительность node.js и PHP в запросах к mysql БД?

    Staltec
    @Staltec
    Node.js разработчик
    Node-код в примере некорректен по отношению к поставленной задаче:
    for (var i = 0; i < 100000; i++) {
      connection.query(
        'SELECT * FROM dreg_document', 
        function(error, result, fields){}
      );
    }

    Тут просто в синхронном цикле вызывается 100000 асинхронных запросов БЕЗ ожидания их завершения. Просто 100000 раз кинули запрос и закончили работу программы подсчитав время. Автор вопроса не понимает как работает node.js и в связи с этим неверно трактует полученный результат. Если ожидать каждого ответа на запрос к SQL-серверу, то результат будет совсем другим.
    Ответ написан
    1 комментарий
  • Как объективно протестировать производительность node.js и PHP в запросах к mysql БД?

    nazarpc
    @nazarpc
    Open Source enthusiast
    for ($i = 0; $i < 1000; $i++) {
        $result = mysql_query('SELECT * FROM dreg_document');
      }

    Бессмысленно, и беспощадно. Вы слышали про кэширование запросов? Так вот только оно здесь и будет работать)

    И ещё, вы об асинхронности слышали? Так вот, NodeJS асинхронный, в том числе с запросами к БД.
    Ответ написан
    4 комментария
  • Правильное сохранение моделей со связанными данными Yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Самое сложное понять как работают модели для сохранения связанных данных в Yii2.

    Просто там все работает. Если вы понимаете, как устроены связи. Существуют: one2one, one2many и many2many. Первые два типа - простые, когда сущность А содержит ссылку на сущность Б. Для организации последнего типа требуется референсная таблица, которая у вас и упоминается, она содержит связи сущностей А и Б.

    В вашем варианте, насколько я понял, можно все связи создать вручную:
    $article = new Article( [ ... ] );
    $article->save();
    
    $author = new Author( [ ... ] );
    $author->save();
    
    $article2Author = new ArticleAuthor( [
        'article_id' => $article->id,
        'author_id' => $author->id,
    ] );
    $article2Author->save();
    Ответ написан
  • Почему SimpleXML вставляет в бд только первую запись из XML файла?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Когда Вы создаете новый объект - Вы создаете новую запись.
    т.е. $articleForImport = new Articles(); означает, что Вы создаете одну запись в БД. Циклом Вы его перезаписываете. Один и тот же объект (запись). Мне кажется, надо попробовать инициализировать этот объект внутри цикла foreach. Тогда с казждой итерацией цикла будет новая запись в БД.
    Ответ написан
    1 комментарий
  • Где есть смысл юзать Elasticsearch?

    Able1991
    @Able1991
    Пишу на рельсах
    Вопрос звучит довольно интересно "Я использую СУБД которая предоставляет мне кучу инструментов по работе с данными, а еще есть поисковой движок, может часть функционала СУБД мне переписать костылями и велосипедами используя поисковой движок, как вам идея?"
    Ответ написан
    Комментировать
  • Видеоуроки по алгоритмам?

    bavaria
    @bavaria
    Студент, Python, Ruby
    Весьма годный курс с Лекториума:
    часть 1
    часть 2
    Ответ написан
    Комментировать
  • Как правильно создать бд?

    mars_unique
    @mars_unique
    #!/bin/sh
    А в чем вопрос состоит? Как пользоваться mysql/php?
    Ответ написан
    2 комментария
  • Выбор архитектуры каталога и поискового движка для организации фасетного поиска?

    mgyk
    @mgyk
    mongodb/elasticsearch
    Проще структура, просто делаете набор атрибутов ( кол-во комнат, координаты, и т.д). Дальше в elasticsearch и оттуда вытаскиваете facet/aggregation. Можно вообще сразу данные в elasticsearch хранить, а не только индекс.
    Ответ написан
    Комментировать
  • (PHP, Yii2) Куда грузить публичные файлы (аватары, картинки)?

    SamDark
    @SamDark
    Yii2 core team
    Где угодно. nginx или apache умеют раздавать файлы из любой директории.
    Ответ написан
    Комментировать
  • Куда копать для знакомства с юнит-тестированием в Yii2?

    Alexufo
    @Alexufo
    противоречивый, сложный, весь компьютерный.
    с англ не дружу.

    Тогда вам в 1С надо. Yii2 на русском только на форуме в виде ответов посетителей.
    Ответ написан
    Комментировать
  • MySQL запрос из двух таблиц

    seriyPS
    @seriyPS
    Надеюсь эту картинку вы знаете?



    Допустим, таблица A это SELECT * FROM games, а таблица B это SELECT * FROM uploaded_games WHERE user_id = ?.

    Т.е. вам нужно из таблицы A вычесть таблицу B (в терминах теории множеств). На картинке это левый столбец, второй сверху.

    SELECT *
    FROM games as A
    LEFT JOIN uploaded_games as B ON (A.game_id = B.game_id)
    WHERE B.game_id is NULL AND B.user_id = ?
    


    Можно записать более наглядно, но, скорее всего, MySQL его не соптимизирует эффективно

    SELECT *
    FROM games
    WHERE game_id NOT IN (
      SELECT game_id FROM uploaded_games WHERE user_id = ?
    )
    
    Ответ написан
    Комментировать
  • Как привязать footer к низу экрана в Twitter Bootstrap?

    Sergei_Erjemin
    @Sergei_Erjemin
    Улыбайся, будь самураем...
    Блин… что за советы… там есть встроенный класс: navbar-fixed-bottom

    <div class="navbar-fixed-bottom row-fluid">
          <div class="navbar-inner">
              <div class="container">
    
    Ответ написан
    7 комментариев
  • PHP: с чего начать, как учить и что в итоге знать?

    metamorph
    @metamorph
    Я сейчас, наверное, дикую вещь скажу, но php лучше начинать учить с MVC-фреймворков (например, Yii).

    Дело в том, что php — язык, всем своим видом так и призывающий писать говнокод. Если начать с фреймворка — мысли потихоньку улягутся по местам, а потом станет интересно, как именно работает такая-то функция, а потом другая функция, а потом… Ну и так далее.

    PS. Я начинал с CakePHP, при этом вообще не зная языка (всю жизнь на перле писал). Кейк был хорош своей жесткой политикой в отношении архитектуры приложения (в Yii, кстати, с этим помягче). Ну и как-то слово за слово через пару недель уже первый проект запустил, а потом и с языком вроде разобрался.
    Ответ написан
    7 комментариев
  • Паттерны в php

    mekegi
    @mekegi
    Выше Vitek05 посоветовал очень хорошую книгу (авторов которой еще часто называют «бандой четырех»).
    Также советую почитать Фаулер. Шаблоны корпоративных приложений.
    Ответ написан
    1 комментарий
  • Как отучить стажёра от говнокода?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Ну я кота к лотку приучил так:
    Тыкал в говнокод и бил! Теперь он великолепно программирует на лотке
    Ответ написан
    1 комментарий
  • Корзина интернет-магазина: данные в cookies, или в базе

    Bartez
    @Bartez
    Раньше было принято хранить корзину в куках.
    Сейчас хорошей практикой является хранение корзины в БД.

    Преимущества хранения в БД:
    1) Корзина может храниться сколько угодно долго.
    2) Корзина не теряется, если покупатель зашёл с другого браузера/компьютера.
    Ответ написан
    2 комментария
  • PDO или ORM в PHP?

    m_z
    @m_z
    Ошибка в понимании разницы между PDO и ORM, вопрос звучит как «ложка или тарелка за ужином»

    PDO это DBAL — простой интерфейс для работы с базой данных, который предоставляет одинаковые методы для работы с различными базами данными, поэтому вам не надо задумываться с какой именно БД мы работаем в текущий момент.

    ORM — из википедии — is a programming technique for converting data between incompatible type systems in object-oriented programming languages. Т.е. техника конвертации обычных таблиц, как в реляционных бд, в объекты. Это и очевидно, с обычными массивами работать трудно, а FETCH_OBJECT это всеравно не ОО-подоход.

    Одна технология дополняет другую.

    Теперь про propel и doctrine.

    Doctrine 1 мне не понравился потому, что в него добавили кучу непонятных фич и в конечном результате вышла каша, трудная для изучения (для примера, три способа извлечения данных из сущности, непонятная абстракция 'Table').

    Propel. скорее мертв, чем жив. Его поднял и поддерживает сейчас только один человек. Не понравился тем, что на одну сущность генерируется 6 непонятных классов, да и сам процесс генерации надоедает

    Doctrine 2 это практически hibernate для php %) по сравнению с первой версии его очистили от мусора, сделали его data mapper-ом. Что нравится — это понятный интерфейс, чистые доменные объекты (сущности) — весь конфиг можно вынести в аннотации/xml/yaml. В результате все модели выглядят так же просто, как и class news {private $title; private $text; }. Остановился на нем.
    Ответ написан
    Комментировать