2016-08-05 12 views
1

私は2つのテーブル:UsersImagesを持っています。接続テーブルに条件を追加する方法は?

したがって、ユーザーはいくつかの画像を持つことができます。この関係については

私はモデルUserで追加の機能があります。

public function images() 
{ 
    return $this->hasMany('App\Images', 'idElement', 'id'); 
} 

をコントローラに私が持っている:

$users = Users::where('id', $id)->with("images")->get(); 

にはどうすれば"where images.type = 1"なりますimages table用コントローラに追加条件を追加することができますか?

このテーブルはプライマリキーのみで接続されていますが、新しい条件をまだ設定する必要があります。

+0

サイドノート:あなたはモデル 'User'を持っていますが、あなたは' Users :: 'にアクセスしています。モデル名は単数でなければなりません(とにかく選好) –

答えて

3

あなたがこのしようとすると、コールバック関数を使用して画像をフィルタリングすることができます:あなたは自分のタイプに基づいて画像のサブセットダウン範囲にしたい場合は、あなたが何かという別のメソッドを追加することができ、このようなもののために

$users = Users::where('id', $id)->with(["images" => function ($query){ 
    $query->where('type', 1); 
}])->get(); 
+0

この条件はイメージテーブルに適用されますか? – Dev

+1

@Devはい、詳細についてはこちらをご覧ください。https://laravel.com/docs/5.1/eloquent-relationships#eager-loading –

+1

@Jose yesです。ここでは、ユーザに関連する画像に対してクエリを実行し、 'type = 1'のところでのみ画像を取得します。これは、種類のフィルタです。 –

2

:よう public function scopedImages()とそのように定義する:あなたは Userimages()機能を同じように、あなたのコントローラで

public function scopedImages() { 
    return $this->hasMany('App\Images', 'idElement', 'id')->where("images.type", "=", 1); 
} 

を、あなたは同じ、この機能にアクセスします

$users = Users::where('id', $id)->with(["scopedImages"])->get(); 

同様の機能images()をしてください、あなたがUserに接続されているすべての画像を検索する必要がある場合は、このように付加的な機能を追加することは、あなたがたときに戻ってしたいの柔軟性を提供します。

+0

paramを関数に渡すには? – Dev

関連する問題