【问题标题】:PHP Activerecord array of objects, what next?PHP Activerecord 对象数组,下一步是什么?
【发布时间】:2012-03-06 17:14:14
【问题描述】:

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

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

【问题讨论】:

    标签: php arrays object activerecord phpactiverecord


    【解决方案1】:

    对于从结果数组中排序或拉出某些 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);
    

    【讨论】:

      猜你喜欢
      • 2012-03-16
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多