如何在laravel中隐藏关系列?

Tan*_*may 8 php laravel eloquent

我有这样的声明:

App\User::with('client')->find(2)->makeHidden('client.phone_no');
Run Code Online (Sandbox Code Playgroud)

我想从关系中隐藏某些列,但我不能用 来做到这一点makeHidden(),因为它只接受而Model不是关系的参数。

如何从关系中隐藏一些列?

Dou*_*aan 12

如果您不想phone_no通过将其添加到hidden属性来隐藏所有请求,您可以执行以下操作:

$user = App\User::with('client')->find(2);
$user->client->makeHidden('phone_no');
return $user;
Run Code Online (Sandbox Code Playgroud)

正如我在对原始问题的评论中所述:我也找到了这种方法。我相信这应该是您想要更频繁地排除列时应该使用的方法。如果您只想排除一次列,我的解决方案应该足够了。


Jon*_*eir 10

您可以隐藏查询结果中的列(不需要急切加载):

$user = User::find(2);
$user->client->makeHidden('phone_no');
Run Code Online (Sandbox Code Playgroud)

或者你甚至没有从数据库中得到它:

$user = User::with('client:id,user_id,...' /* other columns except phone_no */)->find(2);
Run Code Online (Sandbox Code Playgroud)


Mar*_*gen 6

With 接受回调来修改查询。

$users = User::with(['client' => function($query) {
        $query->select(['id', 'name']);
    }])->find(2);
Run Code Online (Sandbox Code Playgroud)

您还可以在客户端模型上定义默认的隐藏属性

protected $hidden = ['phone_no'];
Run Code Online (Sandbox Code Playgroud)

  • 根据这种关系的设置方式,您可能不会选择链接这些模型的“键”...如果客户端属于用户,您将需要选择该外键 (2认同)