PHP Activerecord массив объектов, что дальше? - PullRequest
1 голос
/ 26 февраля 2012

Предположим следующую связь между тремя таблицами в базе данных:

    //working with three tables a client 'has one' business
    //and a business has many business hours.

Следующее даст нам массив объектов Activerecord :

$this->client->business->businesshours

и нам нужно вытащить объект из массива, чтобы получить значение его столбца:

$this->client->business->businesshours[0]->start_time

Поскольку я новичок в PHP Activerecord , каковы некоторые способы получения / сортировки / использования информации из массива объектов, отличных от зацикливания с циклом foreach ()? Существуют ли методы для сортировки массива объектов , извлечения информации на основе значения столбца, какие-либо рекомендации?

1 Ответ

2 голосов
/ 26 февраля 2012

Не существует специфической для библиотеки практики сортировки или извлечения определенных businesshour объектов из массива результатов.Если вы хотите манипулировать возвращаемым массивом объектов, вам нужно использовать стандартные функции массива PHP, такие как array_map в массиве результатов.

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

Поскольку вы не разместили никакого кода, вам просто нужно экстраполировать егоСобственная ситуация из этого примера:

static $has_many = array(
  array(
    'businesshours',
    'conditions' => array('hour BETWEEN ? AND ?' => array(9, 17)),
    'order' => 'hour ASC'
  )
);

Это объявление ассоциации вернет только объекты businesshour между 9 и 17 и сделает это в порядке возрастания.Итак, как вы можете видеть, если вы ограничите свои ассоциации только нужными вам записями, вам не нужно будет сортировать или анализировать массив результатов после получения.

Иногда полезно использовать array_map только для полученияопределенные объекты из вашего массива результатов:

// get $result array
$new = array_map(function($obj) { if ($obj->hour > 9){ return $obj; } }, $result);
...