假设数据库中三个表之间存在以下关联:
//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()循环进行循环之外,还有哪些方法可以从一组对象中提取/排序/使用信息?是否有方法对对象数组进行排序,根据列值提取信息,是否有最佳做法?
答案 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);