2017-05-24 19 views
0

私は関係Laravel - Laravel関係で属性を作成する方法は?

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

を得るために、私のモデルのコードで使用拡張がフィールドパスワード隠されています。私はmakeVisibleパスワードフィールドにしたいいくつかの状況下では

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

どうすればこの問題を解決できますか?

答えて

0

まあ、私が得たフィールドが明示的に次のように使用している場合は、まだ提供されていますがdd($extension->toJson());

をお試しくださいアイデアからhttps://stackoverflow.com/a/38297876/518704

私の関係モデルExtension::classは私のコードで名前で呼ばれているので、私はそのコンストラクタにパラメータを渡すことさえできません。

コンストラクタに何かを渡すために、私は静的なクラス変数を使うことができます。

私のExtensionモデルでは、静的変数を追加してmakeVisibleメソッドを実行します。 後で次の呼び出しとインスタンスがデフォルトのモデル設定を使用するように変数を破棄します。

私はこれを特性に移しましたが、ここで私のモデル例で示します。

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; 
    } 

} 

そして、私の関係で私はこの

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'); 
    } 
... 
} 
0

HiddentoArray()またはtoJson()の方法を使用すると、フィールドにデータが入力されません。 https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json

+0

ようなものを使用することは、私が求めているものを、今です。私は属性を直接取得する方法を知っています。 後で私の** belongsToMany **結果をJson出力に渡すので、いくつかのフィールドを動的に表示/非表示にする必要があります。 – Gruz

3

->makeVisible([...])動作するはずです::ここに詳細情報が

$extension->password; 

$model = \Model::first(); 
$model->makeVisible(['password']); 

$models = \Model::get(); 
$models = $models->each(function ($i, $k) { 
    $i->makeVisible(['password']); 
}); 

// belongs to many/has many 
$related = $parent->relation->each(function ($i, $k) { 
    $i->makeVisible(['password']); 
}); 

// belongs to many/has many - with loading 
$related = $parent->relation()->get()->each(function ($i, $k) { 
    $i->makeVisible(['password']); 
}); 
+0

私はこのアプローチをうんざりしましたが、私の 'public function extensions()'から返すように書かなければならないものが見つかりませんでした。 メソッドから 'Illuminate \ Database \ Eloquent \ Relations \ BelongsToMany'の代わりに' Model :: get() 'Collectionを返すと、それは他のすべてのものを壊してしまいます。 返品関係データのタイプを変更することができます。ここではhttps://laravel.com/docs/5.4/eloquent-relationshipsは 'return $ this-> belongsTo( 'App \ User');を返しますが、' return $ this-> belongsTo( 'App \ User ') - > get(); ' – Gruz

+0

私の答えを更新しました。最後の2つとも関係からロードしています。まず、前もってあなたの関係をロードしていることを前提にしています。 – devk

+0

私は自分の 'public function extensions()'を修正してパスワードフィールドを表示する方法を見ていません。 – Gruz

関連する問題