我有一个模型(例如User
)。
我可以很容易地将它转换为如下数组:
$user->toArray()
然而,这给出了所有属性。我只想要属性x
,y
和z
。
我们可以使用模型的hidden
和visible
属性隐藏/显示值,如下所述:https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json
但是,我不想使用它,因为这更像是一次性的情况。不经常发生。
pluck
方法很理想,但这仅适用于集合,而不适用于模型。
答案 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]