laravel - 如何从关系模型中检索隐藏属性
问题描述
我有 3 个模型:Order、Lancenter 和 ClientAccount
Lancenters 可以创建订单。ClientAccounts 存储用户名和密码。
创建订单时,Lancenter 可以选择现有客户帐户或创建新帐户,因此我会显示与当前 Lancenter 相关的所有 ClientAccounts。出于安全原因,当 lancenter 想要创建新订单时,我不会检索 ClientAccount 密码。
所以,在 ClientAccount.php 我有这个:
protected $hidden = ['password'];
在 Lancenter.php 中:
public function client_accounts()
{
return $this->hasMany('App\ClientAccount', 'id_lancenter');
}
在 LancenterController.php 中,此函数检索 lancenter 的不带密码的客户端帐户:
public function getClientAccounts()
{
$lancenter = Lancenter::with('client_accounts')->where('id_owner', Auth::id())->first();
return response()->json(['client_accounts' => $lancenter->client_accounts]);
}
问题是创建的订单属于 ClientAccount,在这种情况下,我还需要检索 ClientAccount 的密码。
所以我在 Order.php 中有:
public function client_account()
{
return $this->belongsTo('App\ClientAccount', 'id_client_account');
}
OrderController.php 中的这个函数检索新订单:
$orders = Order::with('client_account')->where('status', $status)->get();
return response()->json(['orders' => $orders]);
显然,在没有密码的情况下检索 ClientAccount。
我通过循环获取 OrderController 中索引函数中每个订单的 ClientAccount 来获得它,但我认为有一个更清洁的人可以做到这一点。希望您能够帮助我。
更新: 这是我正在谈论的 OrderController 中的循环
public function index($status)
{
$orders = Order->where('status', $status)->get();
foreach($orders as $key => $order) {
$client_account = ClientAccount::find($order->id_client_account)->makeVisible('password')->toArray();
$orders[$key]['client_account'] = $client_account;
}
return response()->json(['orders' => $orders]);
}
解决方案
推荐阅读
- dictionary - dict remove 也会删除密钥
- json - 比将 V-On 元素相互堆叠更好的书写方式?
- spring - 如何在@PostConstruct 工作之前执行方法?
- anylogic - Anylogic:如果存储已满,则停止采购
- google-apps-script - 获取域内所有团队云端硬盘的所有者/管理员(Google Apps 脚本)
- android - 当我在没有连接 WiFi 的情况下打开我的 android 应用程序时,它显示没有连接 WiFi,正如我在代码中给出的那样
- python - 在 Django 中保存和检索已处理的列表
- javascript - nodejs中的JWT测试用例模拟
- asp.net-mvc - 处理错误的 URL
- ios - 在 UITabbar 中隐藏项目?