fuelphp MODLE inMethod方法扩展 - lextel/evolution GitHub Wiki

model层扩展两函数

/**
 * 遍历所有某些ID
 *
 * 使用:
 *
 * $orders = Model_Order::find('all');
 * list($memberIds, $phaseIds) = Model_Order::getIds($orders, ['member_id', 'phase_id']);
 *
 * @param $modelObj array 取出的记录对象
 * @param $idFields array 收集的字段
 *
 * @return array
 */
public static function getIds($modelObj, $idFields) {

    $data = [];
    foreach($modelObj as $key => $item) {
        foreach($idFields as $field) {
            $data[$key][] = $item->$field;
        }
    }

    return $data;
}

/**
 * 批量获取记录
 *
 * 单表查询辅助,把每条记录都需查询一次的信息组成一条sql
 * 比如: 晒单列表 每个晒单需要读取一次会员信息将会产生一条sql
 *        优化成先循环当前晒单得到所有的会员ID,一次获取再通过索引调用相应的会员信息
 *
 * 使用:
 * $orders = Model_Order::find('all');
 * list($memberIds, $phaseIds) = Model_Order::getIds($orders, ['member_id', 'phase_id']);
 *
 * $members = Model_Member::byIds($memberIds);
 *
 * @param $ids array 主键ID
 * 
 * @return array
 */
public static function byIds($ids) {

    $model = get_called_class();

    $results = $model::find('all', ['where' => ['id', 'in', $ids](/lextel/evolution/wiki/'id',-'in',-$ids)]);

    $data = [];
    foreach($results as $result) {
        $data[$result->id] = $result;
    }

    return $data;
}