Индексы в waModel

1

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

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

protected $id2index = false;

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

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

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

  • +1

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

  • +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'
      ),
      );

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

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

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