【问题标题】:laravel: Eloquent all() data is missing when converted to jsonlaravel:转换为 json 时缺少 Eloquent all() 数据
【发布时间】:2019-01-24 05:41:19
【问题描述】:

Eloquent 对象设置为 Json 时,无法获取部分数据。

  1. 我使用命令artisan make:Auth,并自定义用户表。

具体来说,我认为我不需要删除一次电子邮件列,
但因为有必要,我再次添加。
这些操作使用迁移文件。

  1. 我拿到users表的所有数据,用Json返回。

但是邮件没有输出。

class UserController extends Controller
{
    public function index() {
        return User::all();
    }
}

即使使用json_encode 也会做同样的事情。


使用时存在

$user = User::all();
$userArray = array();
foreach ($user as $u){
    $userArray[] = [
        'name' => $u->name,
        'email' => $u->email
    ];
}
return $userArray;

为什么没有输出邮件?

(我靠谷歌翻译)


补充说明

感谢大家的评论。
用dd()比较json的输出,除了email,没有输出password和remember_token。

或许邮件是私有属性,私有属性是不输出JSON的机制?
那样的话,怎么改成public呢?

用户模型如下所示

class User extends Authenticatable
{
    use Notifiable;
    use SoftDeletes;

    protected $table = 'users';
    protected $dates = ['deleted_at'];
    protected $primaryKey = 'uuid';
    protected $keyType = 'string';
    public $incrementing = false;

    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'email','remember_token',
    ];
~~~
}

【问题讨论】:

  • 如果用户对象包含电子邮件,请先尝试 dd($user)
  • 我不知道dd(),所以前阵子试了一下。 ``` $user = User::all(); dd($用户[0]); ``` 有电子邮件数据。
  • 在遍历你的对象之前执行 print_r
  • 你能显示User 模型吗?
  • 在您的视图中尝试 print_r($user)。它可能会返回电子邮件,但您可能会尝试以不同的方式访问

标签: php laravel eloquent


【解决方案1】:

我自己解决了。
我发现这里设置的列没有输出到JSON。

protected $hidden = [
        'password', 'email','remember_token',
];

这是一件非常简单的事情......

【讨论】:

    【解决方案2】:

    试试这个:

    return User::select('name', 'email')->get()->toArray();
    

    【讨论】:

    • 我试了一下,但没有输出邮件。(只输出名字。)
    • 从用户模型的隐藏属性中删除电子邮件
    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多