在Laravel中一次获取模型的指定属性


Get specified properties of a model all at once in Laravel

我想将一些用户数据传递给视图,以便它可以显示在配置文件页面中。它有很多,但我不想只传递所有内容,因为有些东西视图不应该访问。所以我的代码看起来是这样的:

return view('profile', [
    'username' => Auth::user()->username,
    'email' => Auth::user()->email,
    'firstname' => Auth::user()->firstname,
    'country' => Auth::user()->country,
    'city' => Auth::user()->city->name,
    'sex' => Auth::user()->sex,
    'orientation' => Auth::user()->orientation,
    'age' => Auth::user()->age,
    'children' => Auth::user()->children,
    'drinking' => Auth::user()->drinking,
    'smoking' => Auth::user()->smoking,
    'living' => Auth::user()->living,
    'about' => Auth::user()->about,
]);

我的问题是:这能写得更短/更简单吗?

谢谢!


编辑:

我不想要{{ Auth::user()->firstname }},因为视图中有一个逻辑,这很糟糕——我认为,视图中应该只显示普通变量,而不是其他任何变量。

所以我正在寻找类似的东西:

return view('profile', Auth::user()->only(['firstname', 'email', ...]));

您可以自己创建一个名为getPublicData的方法,然后返回所需的所有属性。

...
public function getPublicData() {
    return [
        'property_name' => $this->property_name
    ];
}
...

然后在控制器/视图中使用它。也许这不是一个最佳解决方案,但你可以在模型中隔离这个东西,避免控制器中有太多代码。

另一种先进的方法可以是__get方法的覆盖。然而,我不是第一个遇到这种情况的人。

希望它能有所帮助!

您不需要将这些变量传递给视图,您可以使用刀片在视图中直接访问它们

<h1>{{ Auth::user()->username }}</h1>