php - Laravel 关闭后过滤数据
问题描述
我有一个非常简单的问题,想象一下我有Orders
模型,现在我正在写这样的东西:
Order::where('status', 1)->with('orderer')->get();
好的。这很简单,并返回类似的内容:
{
id: 1,
price: 200,
status: 1,
income: 21,
orderer_id: 4,
orderer: {
//some orderer fields
}
}
现在我不想获取整个对象,我想从数据中删除income
,orderer_id
和status
属性。如果我写这样的东西:get(["id", "price"])
我最终没有订购对象(get(["id", "price", "orderer"])
也不起作用),即使使用 select() 我也无法使其工作,那么解决方案是什么?另外我不想对所有人隐藏它,例如管理员应该知道收入但用户不应该,所以 $hidden 字段将不起作用。
解决方案
您可以添加select()
,但要确保 select 不采用数组而是逗号分隔的参数:
$orders = Order::where('status', 1)->with('orderer');
if($user->role == 'admin'){
$orders->select('id','income','status','price');
}
else{
$orders->select('id','status','price');
}
$orders = $orders->get();
上面将首先检查当前登录用户的角色,并相应地选择所需的列。
推荐阅读
- javascript - 正则表达式或任何 js 字符串方法从 url 获取文本
- flutter - 为什么 If 语句会在 Flutter 中配置 TextFormField?
- javascript - IOS PWA 应用支持 Web NFC API
- autodesk-forge - 如何在伪造查看器中正确管理 dbId
- angular - 我们可以只为 iOS 的离子电容器打开英文小键盘吗?
- redirect - HTTPoison 跟随重定向
- sql - 从 Postgres 中的 json 对象中删除双引号
- javascript - 如何减少 JavaScript 中的录制开始延迟?
- forms - 如何更新 Vue 中的表单绑定变量?
- asp.net - 如何从 Telerik 网格中获取价值