PHP Activerecord对象数组,下一步怎么办


PHP Activerecord array of objects, what next?

假设数据库中的三个表之间存在以下关联:

    //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()循环之外,还有什么方法可以从对象数组中提取/排序/使用信息?是否有方法对对象数组进行排序、根据列值提取信息,以及任何最佳实践?

没有特定于库的做法来对结果数组中的某些businesshour对象进行排序或提取。如果你想操作返回的对象数组,你需要在结果数组上使用标准的PHP数组函数,比如array_map

如果知道结果数组中返回对象的排序顺序或条件,则应该在关联声明中指定这些条件,这样就不会返回不想要或不需要的对象。

由于你还没有发布任何代码,你只需要从这个例子中推断出你自己的情况:

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

此关联声明将只返回9和17之间的businesshour对象,并按升序执行。因此,正如您所看到的,如果您将关联限制为仅需要的记录,那么在收到结果数组后就不需要对其进行排序或解析。

有时,使用array_map只从结果数组中获取某些对象是有用的:

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