2016-03-29 10 views
1

内のフィールドを無視します熱心な負荷を使用する。私はちょうどIGNORE_FIELD機能のようなものが存在するかどうかを知りたいので、私はこのような何かを行うことができます。は、これらのモデルを考えてみましょ選択Laravel雄弁

$flightUser = Flight::with(['user', function ($q) 
{ 
    $q->ignoreField('user.address'); 
}]) 

私はユーザーモデルの内側に隠された配列にアドレスフィールドをプッシュすることができ知って、

protected $hidden = ['address']; 

または$q->select('fields')を実行し、アドレスフィールドは含まないが、私の本当の疑問は、laravelに上記のような機能があるかどうかである。

NOTE

私は1つのフィールドは、契約の大きなではありません知っています。しかし、私の質問は私の本当の問題の簡略版です。

答えて

0

私はあなたが何を得ているかを見ていると思います。あなたは雄弁な関係を変えて、そのフィールドを絶対に読み込まないようにすることができます。

class Flight extends Model { 

    public function user() 
    { 
     return $this->belongsTo('App\User', 'userID') 
      ->select(['userID', 'username']); 
    } 

} 

だから関係は、ユーザーIDとユーザー名以外の何かをロードすることはありません。差別化したい場合は、完全な1つをuser()とし、限定された1つをuserName()と呼ぶこともできます。

class Flight extends Model { 

    public function user() 
    { 
     return $this->belongsTo('App\User', 'userID'); 
    } 

    public function userName() 
    { 
     return $this->belongsTo('App\User', 'userID') 
      ->select(['userID', 'username']); 
    } 

} 
+0

はい、そのトリックを行います。しかし、私はまだLaravelがそのような機能を果たしているかどうか疑問に思っています。私はないと思う – ggderas

+1

いいえ、私の知識に。私は前もって真の 'removeSelect()'を探しましたが、私の解決策を除いて、あるいはコレクションメソッドを使って手作業で削除するのではなく、laravelに組み込まれた関数はありません。正直なところ、それが重要なのであれば、雄弁な関係を使わず、2つのクエリを書くだけで良いかもしれません。 –