Laravel-如何在Laravel关系中使Visible为属性? [英] Laravel - how to makeVisible an attribute in a Laravel relation?
问题描述
我在模型代码中使用以获得关系
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屋!