javascript - laravel ajax 返回连接表的整个对象
问题描述
我只想从表用户中获取名称,但它会在网络选项卡中返回整个用户对象,该对象会泄露电话等私人信息(仅在用户表中)
管理员模型:
class Admin extends Model
{
protected $appends = ['name'];
public function user()
{
return $this->belongsTo('App\User');
}
public function getNameAttribute()
{
return $this->user?$this->user->name:'';
}
}
管理员控制器:
public function ajaxLoadAdmins (Request $request)
{
$query = Admin::select('admins.slug', 'admins.about')->paginate(10);
return $admins;
}
bur 当我从 ajax/axios 调用这个函数时,它返回一个完整的用户对象以及包含用户表所有列的名称
我还尝试不使用访问器/修改器,并像下面的代码一样简单,但是当我们在 devtools 的网络选项卡中看到或者如果我们在控制台中登录它时,它仍然有一个用户对象......
public function ajaxLoadAdmins (Request $request)
{
$query = Admin::select('admins.slug', 'admins.about', 'users.name')->leftjoin('users','admins.user_id','=','users.id')->paginate(10);
return $admins;
}
解决方案
如果Laravel
涉及一对多关系,则包含可能是笨重的、额外不必要的列,有时还会出现多个重复的模型。使用 with 相反,它会急切地加载您的关系并将其转换为响应。
Admin::with('user')->paginate(10);
您的管理模型将具有此结构,并且您的用户名将被包含在内。
{
"slug": "admin",
"about": "interesting",
"user": {
"name": "John doe"
}
}
您可以隐藏模型上的转换属性。因此,在您的 User.php 模型上添加以下内容。
class User {
protected $hidden = ['phone'];
}
推荐阅读
- python - python:在数据框列表中按名称对列进行子集和重命名
- python - 在循环运行后使用字典的值更新多个键并更新用于更新字典的值
- r - 如何告诉 R Markdown 当前块返回 Latex 代码
- java - 如何将经典的 cronjobs 转换为quartz-scheduler 的 cron 表达式
- google-apps-script - 链接到 getlastrow 的脚本出错 - 我认为
- flutter - Flutter TextFormField 换行并自动适配高度
- mysql - 更新与其他列具有一个或多个相同值的列值
- spring-boot - 海王星DB图遍历管理的建议
- c# - 急切加载的数据错误,说明上下文已处理
- c++ - 比较2个大小不等的地图c ++