2016-11-08 15 views
0

コントローラに遅延ロードする必要のあるモデルではリレーションがありますが、元のモデルのプロパティを使用してクエリ制約を行う必要があります。 だから私はのようなものがあります:

$Users = User::all(); 
$Users->load(['disputes' => function($query){ 
$query->where('property', $this->property); 
}]); 

をしかし、それは未定義のプロパティ$ account_number_tuを返します。 load()を実行しているときに$ thisが$ Users内の$ Userを参照していることを確認するにはどうすればよいですか? モデル内でこの制約を実行しようとしましたが、

$this->property; 

を返します。ボンネットの下に

答えて

1

load()UserモデルにBuilderのインスタンスを初期化し、ビルダーのwith方法にあなたがloadに渡されたのparamsを渡します。これで、withメソッドで行うことができるloadメソッドのすべてを実行できます。

あなたが行うことができますあなたの質問に答えるために:と同じになる

$Users = User::all(); 
$Users->load(['disputes' => function($query) { 
    return $query->select('disputes.*') 
     ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id') 
     ->whereRaw('users.property = disputes.property'); 
}]); 

:ユーザーが携帯電話と呼ばれる性質を持っているのであれば、紛争は、たとえば、別のテーブルである

$Users = User::with(['disputes' => function($query) { 
    return $query->select('disputes.*') 
     ->leftJoin('disputes', 'disputes.user_id', '=', 'users.id') 
     ->whereRaw('users.property = disputes.property'); 
}]); 
+0

は私が行うことができますwhereRaw( 'disputes.phone' = users.phone '); ? – jsrosas

+0

修正。 'users'と' disputes'がテーブルの名前であるという条件の下で(そうでなければ、実際のテーブル名と接頭辞とを入れ替えます)。 –

+0

私が実際に照会しようとしているテーブルの名前は「紛争」と「score_aware_disputes_accounts」です。それらはMySQLに示されている名前ですが、私はエラーを取得し続ける列が見つかりません。私はwhereRaw( 'disputes.account_id = score_aware_disputes_accounts.id')のような質問をしています。 – jsrosas