首页 > 解决方案 > 如何从关系模型中检索隐藏属性

问题描述

我有 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]);
    }

标签: laraveleloquentrelationship

解决方案


推荐阅读