隐藏Laravel Eloquent查询的关系

时间:2018-06-06 22:03:27

标签: php laravel

我需要你关于更好地隐藏关系数组信息的建议。

$members = User::with('profile')->paginate(9);

$members->makeHidden([
    'slug', 'profile.avatar'
]);

dd($members->toArray());

此代码不会隐藏配置文件数组中的信息。

由于

2 个答案:

答案 0 :(得分:3)

关系属性不支持

makeHidden,只支持整个关系。相反,采取你想要的:

$member = User::with(['profile' => $function($query) {
    $query->select('id', 'user_id', 'about');
}])->paginate(9);

例如,上述内容只会明确地为您提供iduser_idabout字段。

修改

如果您使用5.6,您也可以将列定义为逗号分隔字符串:

$member = User:with('profile:id,user_id,about')->paginate(9);

答案 1 :(得分:2)

将它们添加到您的模型中。

*隐藏关系时,请使用关系的方法名称。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = ['password'];
}

这会解决你的问题

https://laravel.com/docs/5.6/eloquent-serialization#hiding-attributes-from-json