• Особенности настройки Krajee FileInput widget для Yii2?

    kimono
    @kimono
    Web developer
    Во-первых: вы используете 'attribute' => 'imageFile[]',, а это означает, что нужно исправить:
    В контроллере:
    $model->imageFile = UploadedFile::getInstances($model, 'imageFile');
    Yii::$app->response->format = Response::FORMAT_JSON;
    if ($model->upload()) {
      return ['error' => null];
    }

    В модели:
    /**
    * @var UploadedFile[]
    */
    public $imageFile;

    foreach ($this->imageFile as $imageFile){
      $imageFile->saveAs(Yii::getAlias('@app').'/web/img/' . $imageFile->baseName . '.' . $imageFile->extension);
    }
    Ответ написан
    Комментировать
  • Как правильно сделать структуру базы данных?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В такой структуре БД поиск по группе параметров делается JOIN'ами
    SELECT *
      FROM `cars` AS `c`
      JOIN `cars_attr` AS `ca1` ON `ca1`.`id_car` = `c`.`id` 
        AND `ca1`.`id_attr` = 4 AND `ca1`.`val` >= 2004 AND `ca1`.`val` <= 2008
      JOIN `cars_attr` AS `ca2` ON `ca2`.`id_car` = `c`.`id` 
        AND `ca1`.`id_attr` = 3 AND `ca1`.`val` >= 10000 AND `ca1`.`val` <= 90000
      JOIN `cars_attr` AS `ca` ON `ca`.`id_car` = `c`.`id` 
      JOIN `attr` AS `a` ON `a`.`id` = `ca`.`id_attr`
      WHERE `c`.`category` = 1

    или через IN
    SELECT *
      FROM `cars` AS `c`
      JOIN `cars_attr` AS `ca` ON `ca`.`id_car` = `c`.`id` 
      JOIN `attr` AS `a` ON `a`.`id` = `ca`.`id_attr`
      WHERE `c`.`category` = 1
        AND `c`.`id` IN (
          SELECT `id_car` FROM `cars_attr` 
            WHERE `ca1`.`id_attr` = 4 AND `ca1`.`val` >= 2004 AND `ca1`.`val` <= 2008
        ) AND `c`.`id` IN (
          SELECT `id_car` FROM `cars_attr` 
            WHERE `ca1`.`id_attr` = 3 AND `ca1`.`val` >= 10000 AND `ca1`.`val` <= 90000
        )
    Ответ написан
    4 комментария
  • Как составить запрос mysql?

    @dvl0per
    sql php java c# html css javascript jquery
    У вас между таблицами ITEMS и ATTR связь M:N (многие ко многим) поэтому логичнее всего выбирать из вспомогательной таблицы ATTR_ITEMS и связывать с ней уже прочие таблицы.
    То есть основное тело запроса (до конструкции WHERE) будет что-то вроде
    SELECT *
    FROM `attr_items` ai
    inner join `items` i on ai.id_item = i.id
    inner join `attr` a on ai.id_attr = a.id

    Не совсем понятно, как определяется значение для категории.
    Допустим, что категория "Авто/мото" имеет id = 2, тогда для первой части вопроса:
    SELECT *
    FROM `attr_items` ai
    inner join `items` i on ai.id_item = i.id
    inner join `attr` a on ai.id_attr = a.id
    WHERE
    /* условие для категории */
    (a.category_id = i.category and i.category = 2) and
    /* условие для марки автомобиля */
    (a.name = 'Марка' and ai.val = 'Audi') and
    /* условие для модели автомобиля*/
    (a.name = 'Модель' and ai.val = 'Audi А8')

    для второй части вопроса:
    SELECT *
    FROM `attr_items` ai
    inner join `items` i on ai.id_item = i.id
    inner join `attr` a on ai.id_attr = a.id
    WHERE
    /* условие для категории */
    (a.category_id = i.category and i.category = 2) and
    /* условие для марки автомобиля */
    (a.name = 'Марка' and ai.val = 'Audi') and
    /* условие для года выбуска автомобиля*/
    (a.name = 'Годвыпуска' and ai.val BETWEEN 2005 and 2015)

    Обращаю внимание, что поле ATTR_ITEMS.VAL похоже имеет тип данных varchar, поэтому BETWEEN к для года выпуска нему может быть не применимо в том виде, что я указал. Возможно надо использовать конструкцию LIKE.

    P.S. На мой взгляд, такая структура БД пригодна только для маленьких объемов данных. Но, к сожалению, она часто применяется в 1С-Bitrix на продакшене, что приводит к тормозам.
    Ответ написан
    2 комментария
  • MySql: Как сделать выборку из одной таблицы на основе другой?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    select
      w.name
    from warehouse as w
    inner join goods as g
      on w.id = g.warehouse_id
    group by w.id
    having count(g.id) > 3;
    Ответ написан
    Комментировать