首页 > 解决方案 > 修改集合中的laravel表名仅用于输出

问题描述

我有两个模型

class MerchOrder extends Model
{
    protected $table = 'merch_orders';

    protected $with = 'merchProducts';

    public function merchProducts()
    {
        return $this->belongsToMany(MerchProduct::class, 'merch_products_ordered', 'orderno', 'product')
            ->withPivot('quantity', 'price');
    }

}

class MerchProduct extends Model
{
    protected $table = 'merch_products';

    public function merchOrders ()
    {
        return $this->belongsToMany(MerchOrder::class, 'merch_products_ordered', 'product', 'orderno');
    }

}

这是返回的

    {
        "id": 1234,
        "receipt": "G4DD8C",
        "employee": 01,
        "location": 2,
        "time_insert": "2020-02-21 10:46:47",
        "time_update": "2020-02-23 06:11:23",
        "status": "delivered",
        "merch_products": [
            {
                "id": 45,
                "title": "Example Title",
                "desc": "Example Description",
                "price": "237.50",
                "pivot": {
                    "orderno": 57,
                    "product": 45,
                    "quantity": 1,
                    "price": "237.50"
                }
            }
        ]
    },

如何调整相关类中输出的表名?IE。这部分,我希望输出为“ordered”而不是表名“merch_products”

"merch_products": [
            {

我已经尝试过 laravel as() 方法,但它只是重命名了“pivot”键,而我能找到的所有其他内容都只涉及重命名单个属性,而不是整个属性集合。

TIA

标签: phplaraveleloquent

解决方案


如果您希望它以不同的名称获取并传递您想要用作外部引用的自定义列名称,您可以这样命名关系。您可以在此处阅读有关Laravel 命名约定的更多信息。

您需要将 MerchOrder 模型更改为以下内容:

class MerchOrder extends Model
{
    protected $table = 'merch_orders';

    protected $with = 'orders';

    public function orders()
    {
        return $this->belongsToMany(MerchProduct::class, 'merch_products_ordered', 'orderno', 'product')
            ->withPivot('quantity', 'price');
    }

}

推荐阅读