【问题标题】:Eloquent all and custom property雄辩的所有和自定义属性
【发布时间】:2017-09-26 12:08:38
【问题描述】:

假设我有一个 Order 模型和一个端点,它可以查询所有的订单。

现在是这样的:

public function findAll(Request $request, Response $response, $args)
    {
        return Order::all()->toJson(JSON_PRETTY_PRINT);
    }

但是,我想在 json 响应中添加自定义属性。

我的订单如下所示:

protected $fillable = [
        'productIds',
        'fullname',
        'phone',
        'location'
    ];

我想添加一个“names”和一个“totalPrice”属性,它们不在数据库中,它们是通过 getProductNameList() 和 getSumPrice() 方法计算的。这怎么可能? :)

【问题讨论】:

  • 您使用的是 Slim 和 Eloquent 吗?这通常是变压器的用例。
  • 从未听说过变形金刚。 :D
  • 转换器有责任标准化资源的输出。您可以使用集合或数组映射自己实现这一点。
  • 是的,数组映射看起来像一个解决方案。谢谢大佬,我试试看。
  • 你知道 Eloquent Accessors/Mutators 吗?你读过这个laravel.com/docs/5.4/… 吗?

标签: php eloquent slim


【解决方案1】:

您可以尝试使用 $append 模型属性直接从模型中添加数据,如下所示:

Class Order extends Model
{
    protected $append = ['attribute_name'];

    public function getAttributeName() {
        $dataToReturn = [];
        return ($dataToReturn);
    }
}

文档在这里:https://laravel.com/docs/5.4/eloquent-serialization#appending-values-to-json

【讨论】:

    【解决方案2】:

    您可以使用 json 响应,因此您可以传递自定义数组

        public function findAll(Request $request, Response $response, $args)
        {
                $order= Order::all();
           return response()->json([
                'order' =>   $order,
                'names' => 'CA',
               'totalPrice'=>150
            ]);
            }
    

    根据您的问题,您使用单独的方法进行计算,因此 getProductNameList()getSumPrice() 。在这两种方法中,您都可以返回 $value 和方法响应,您可以将其传递给这个数组 更多参考: https://laravel.com/docs/5.5/responses#json-responses

    【讨论】:

    • 看起来不错,但是有什么解决方案可以将该属性添加到订单对象中而不是旁边?
    • 你可以创建一个数组并在单个数组中传递它
    • 由于这是标记为slim,而不是laravel,我认为这无效。
    • 嗯,它不起作用,因为 Order:all() 会返回一个订单数组,我想将 totalPrice 和名称添加到每个订单对象。
    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2020-06-23
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多