首页 > 解决方案 > 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_idstatus属性。如果我写这样的东西:get(["id", "price"])我最终没有订购对象(get(["id", "price", "orderer"])也不起作用),即使使用 select() 我也无法使其工作,那么解决方案是什么?另外我不想对所有人隐藏它,例如管理员应该知道收入但用户不应该,所以 $hidden 字段将不起作用。

标签: phpjquerydatabaselaraveleloquent

解决方案


您可以添加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();

上面将首先检查当前登录用户的角色,并相应地选择所需的列。


推荐阅读