Laravel-如何在Laravel关系中使Visible为属性? [英] Laravel - how to makeVisible an attribute in a Laravel relation?

查看:353
本文介绍了Laravel-如何在Laravel关系中使Visible为属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在模型代码中使用以获得关系

I use in my model code to get a relation

class User extends Authenticatable
{
...
    public function extensions()
    {
        return $this->belongsToMany(Extension::class, 'v_extension_users', 'user_uuid', 'extension_uuid');
    }
...
}

扩展名具有隐藏的密码字段.

class Extension extends Model
{
...
    protected $hidden = [
        'password',
    ];
...
}

在某些情况下,我想 makeVisible 密码字段.

Under some circumstances I want to makeVisible the password field.

我该如何实现?

推荐答案

好吧,我的想法来自 https://stackoverflow. com/a/38297876/518704

由于我的关系模型Extension::class在我的代码return $this->belongsToMany(Extension::class,...中是按名称调用的,所以我什至无法将参数传递给它的构造函数.

Since my relation model Extension::class is called by name in my code return $this->belongsToMany(Extension::class,... I cannot even pass parameter to it's constructor.

因此,为了将某些内容传递给构造函数,我可以使用静态类变量.

So to pass something to the constructor I may use static class variables.

因此,在我的Extension模型中,我添加了静态变量并运行makeVisible方法. 稍后我销毁变量,以确保下次调用和实例使用默认模型设置.

So in my Extension model I add static variables and run makeVisible method. Later I destruct the variables to be sure next calls and instances use default model settings.

我将其移至特征,但在这里以我的模型示例为例.

I moved this to a trait, but here I show at my model example.

class Extension extends Model
{
    public static $staticMakeVisible;

    public function __construct($attributes = array())
    {
      parent::__construct($attributes);

      if (isset(self::$staticMakeVisible)){
          $this->makeVisible(self::$staticMakeVisible);
      }
   }
.....

    public function __destruct()
    {
      self::$staticMakeVisible = null;
    }

}

在我的关系中,我使用类似的东西

And in my relation I use something like this

class User extends Authenticatable
{
...
    public function extensions()
    {
        $class = Extension::class;
        $class::$staticMakeVisible = ['password'];

        return $this->belongsToMany(Extension::class, 'v_extension_users', 'user_uuid', 'extension_uuid');
    }
...
}

这篇关于Laravel-如何在Laravel关系中使Visible为属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆