隐藏雄辩关系中的外籍ID列

时间:2019-02-07 08:29:30

标签: php laravel eloquent

让我们考虑爱因斯坦之谜和这两个模型:

class Pet extends Eloquent
{
    public function pet()
    {
        return hasOne(Man::class)
    }
}

class Man extends Eloquent
{
    public function pet()
    {
        return belongsTo(Pet::class)
    }
}

如果我想得到所有宠物:

Pet::all()->toArray();

我会举个例子:

{
    id: 2,
    man: {
        nationality: "German",
        pet_id: 2
    }
    name: "Fish"
}

在这种情况下,pet_id列是无关紧要的,我想将其隐藏。怎么样?

2 个答案:

答案 0 :(得分:1)

使用Eloquent API Resources获取模型的数组版本。从长远来看,这比依赖于无法配置的模型的toArray方法更为灵活。

如果您仍然想使用toArray,则可以在每个相应模型中简单地将不应包含的属性添加到名为$hidden的受保护成员变量中(请参阅有关serialization of Eloquent models的文档)。

答案 1 :(得分:1)

class Pet extends Eloquent
{
    public function pet()
    {
        return hasOne(Man::class)->select('nationality');
    }
}