在Laravel转换为数组时,从Eloquent模型中获取某些属性

时间:2017-02-09 22:42:38

标签: laravel laravel-5 laravel-5.2 laravel-5.1 laravel-5.3

我有一个模型(例如User)。

我可以很容易地将它转换为如下数组:

$user->toArray()

然而,这给出了所有属性。我只想要属性xyz

我们可以使用模型的hiddenvisible属性隐藏/显示值,如下所述:https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json

但是,我不想使用它,因为这更像是一次性的情况。不经常发生。

pluck方法很理想,但这仅适用于集合,而不适用于模型。

2 个答案:

答案 0 :(得分:3)

您可以覆盖toArray()方法,并允许它获取您想要返回的字段数组。

public function toArray(array $fields = [])
{
    // Get the full, original array.
    $original = parent::toArray();

    // If no fields are specified, return the original array.
    // This ensures that all existing code works the same
    // way as before.
    if (empty($fields)) {
        return $original;
    }

    // Return an array containing only those fields specified
    // by the input parameter.
    return array_intersect_key($original, array_flip($fields));
}

在User模型中覆盖此方法后,您现在可以拥有以下代码:

// Will return an array with all the fields.
$full = $user->toArray();

// Will return an array with only x, y, and z fields.
$partial = $user->toArray(['x', 'y', 'z']);

注意:由于这会调用父toArray()方法,因此此重写方法仍将遵循$hidden属性。因此,如果隐藏了y,并且您调用$user->toArray(['x', 'y', 'z']);,则生成的数组将不包含y值。

答案 1 :(得分:0)

您现在可以使用only方法了,我相信至少从Laravel 5开始,它已经返回了数组:

$user->only(['x', 'y', 'x']);

OR

$user->only('x', 'y', 'x');
// ['x' => 1, 'y' => 2, 'x' => 3]