使用 FuelPHP 从 ORM 返回 _data 数组

Posted

技术标签:

【中文标题】使用 FuelPHP 从 ORM 返回 _data 数组【英文标题】:Return _data array from ORM with FuelPHP 【发布时间】:2016-04-26 13:57:06 【问题描述】:

我正在使用 Fuelphp 及其 ORM 创建一个 REST API,可在此处找到文档:http://fuelphp.com/docs/packages/orm/crud.html

我可以像这样返回数据库行的对象:

$entry = Model_V1_Inventory::find(1);

这将返回 PK 等于 1 的对象,这是预期的。如何访问 _data 数组以对其进行 json_encode 并将其作为 REST 响应的一部分返回?我可以通过简单地调用来访问数组中的各个项目:

$entry->product_ref

作为一个例子,但我看不到返回受保护的 _data 数组。

从 ORM 返回的对象:

    Model_V1_Inventory Object
(
    [_is_new:protected] => 
    [_frozen:protected] => 
    [_sanitization_enabled:protected] => 
    [_data:protected] => Array
        (
            [product_ref] => from the model
            [cost_price] => 0.99
            [rrp_price] => 11.67
            [current_price] => 5.47
            [description] => test description
            [created_at] => 2016-04-26 14:29:20
            [updated_at] => 2016-04-26 14:29:20
            [id] => 1
        )

    [_custom_data:protected] => Array
        (
        )

    [_original:protected] => Array
        (
            [product_ref] => from the model
            [cost_price] => 0.99
            [rrp_price] => 11.67
            [current_price] => 5.47
            [description] => test description
            [created_at] => 2016-04-26 14:29:20
            [updated_at] => 2016-04-26 14:29:20
            [id] => 1
        )

    [_data_relations:protected] => Array
        (
        )

    [_original_relations:protected] => Array
        (
        )

    [_reset_relations:protected] => Array
        (
        )

    [_disabled_events:protected] => Array
        (
        )

    [_view:protected] => 
    [_iterable:protected] => Array
        (
        )

)

【问题讨论】:

【参考方案1】:

好吧,在玩了一些之后,我发现了一个使用 FuelPHP 的内置类 Format 来解决这个问题的方法;

Format::forge($entry)->to_array();

将执行转换,然后对响应数组进行 json_encode。这是我使用 FuelPHP ORM 将 json 编码字符串发送回用户的完整方法:

public function get_product()

    $product_id = Uri::segment(4);
    $response = new Response();
    try
        if($product_id == null)
            throw new Exception('No product ID given');
        else
            $entry = Model_V1_Inventory::find($product_id);
            $entry = Format::forge($entry)->to_array();

            $response->body(json_encode($entry));
            $response->set_status(200);
            return $response;
                        
    catch(Exception $e)
        $response->body(json_encode(['Status' => 400, 'Message' => $e->getMessage()]));
        $response->set_status(400);
        return $response;
        throw new Exception($e);
    

【讨论】:

【参考方案2】:

您也可以简单地使用$entry->to_array(),不需要Format 类。

https://github.com/fuel/orm/blob/fc4f27af2cc55e99c435d490d0af69fabda70cb7/classes/model.php#L2028

【讨论】:

以上是关于使用 FuelPHP 从 ORM 返回 _data 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何为fuelphp ORM关系设置动态条件

Fuelphp ORM添加到模型属性时出现意外结果

如何在fuelPHP Orm模型中选择MAX或COUNT

FuelPHP ORM - 未找到属性

FuelPHP的orm和mysql不区分大小写`like`

FuelPHP ORM无法插入相关表