Индексы в waModel

1

Частенько бывает так, что в том же яваскрипте мы, чтобы избежать двойных переборов, должны точно попадать на необходимые нам индексы массива. Для этого каждый раз приходится перестраивать массивы перед выдачей их в response.

Предлагаю ввести в waModel параметр

protected $id2index = false;

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

Т.к. параметр по умолчанию false, то это никак не повлияет на совместимость с уже написанным кодом, но даст удобный инструмент для будущих разработок.

6 комментариев

  • +3

    Может я, конечно, неправильно ваc понял, но:

    $model->getAll('field') - вернёт массив с ключами поля field
    $model->getByField('somefield', 'somevalue', 'field') - вернёт массив с ключами поля field

    Внутри модели:
    $model->query($sql)->fetchAll('field') - вернёт массив с ключами поля field


    • +1

      Сейчас пока нет возможности детально протестировать, но обычно мы получаем массивы с индексами 0, 1, 2, 3,...

      Внутри этого массива у нас допустим почти всегда id, name,...

      Допустим мы получили такой массив:

      array(
      0 => array(
      'id' => 23,
      'name' => 'vasya'
      ),
      1 => array(
      'id' => 42,
      'name' => 'petya'
      ),
      );

      Но удобней было бы получить вот такой массив:

      array(
      23 => array(
      'id' => 23,
      'name' => 'vasya'
      ),
      42 => array(
      'id' => 42,
      'name' => 'petya'
      ),
      );

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

      • +2

        Значит я вас понял правильно, используйте то, что я написал выше.
        Это очень много где в коде Shop-Script используется...

        • +1

          Офигенно!

          А я пересобираю массивы... Буду знать. Спасибо.

          • +1

            Если ты для js такую выборку делаешь, то лучше не надо. В массиве js индексы всегда идут подряд и от нуля. Есть вероятность, довольно большая, что числовые ключи будут потеряны при json_encode результата выборки -- оно превратит php-массив с числовыми ключами в json-массив, а не объект. Конечно, можно передавать опцию JSON_FORCE_OBJECT, но потеряешь совместимость с 5.2

          • +1

            Поддерживаю.
            Либо так, либо каким-то другим способом.

            Добавить комментарий

            Чтобы добавить комментарий, зарегистрируйтесь или войдите