PHP Activerecord对象数组,下一步是什么?

时间:2012-02-26 14:38:59

标签: php arrays object activerecord phpactiverecord

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

    //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 个答案:

答案 0 :(得分:2)

没有特定于库的做法可以将某些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);