假设数据库中的三个表之间存在以下关联:
//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);