2016-12-30 17 views
4

たとえば、すべての投稿を具体的な日付で確認できます。Laravel Eloquent:whereHas()メソッドを使用して関連レコードを取得する方法は?

$users = User::whereHas('posts', function($q){ 
    $q->where('created_at', '>=', '2015-01-01 00:00:00'); 
})->get(); 

しかし、モデルモデルの日付(created_at)とユーザーモデルの日付属性を比較する場合はどうすればよいですか?例えば

$users = User::whereHas('posts', function($q){ 
    $q->where('created_at', '>=', ** $user->customDate ** ← look this); 
})->get(); 

UPD。 私はLaravelの外でEloquentを使用します。

+0

customDateはusersテーブルのフィールドですか? –

+0

はい、MySQL DATEフィールドタイプ – Stanislav

+0

何がポイントですか?あなたは何を達成しようとしていますか? – Sherif

答えて

2

$q->whereRawを使用して、生の式をEloquentサブクエリで使用できます。あなたの例では

DB::rawとは異なり

$users = User::whereHas('posts', function($q){ 
    $q->whereRaw("created_at >= users.customDate"); 
})->get(); 

、これはIlluminate\DatabaseファサードのLaravelの依存性注入することなく使用することができます。

1

ユーザーテーブルはあなたが通常のクエリでしまうようにあなたが値を参照するためにDB::raw()を使用することができますusersと呼ばれていると仮定すると:

$users = User::whereHas('posts', function($q){ 
    $q->where('created_at', '>=', DB::raw('users.customDate')); 
})->get(); 

DBファサードをインポートするか、単にそれを変更するかを忘れてはいけません\DB::raw(...)

あなたはLaravelのこの外側を使用していて、ファサードを持っていない場合は、仲介を切り出して行うことができます。このことができます

$q->where('created_at', '>=', new Illuminate\Database\Query\Expression(('users.customDate')); 

願っています!

+0

ええ、あなたの方法はこの状況で動作するのでしょうか? ScheduledEvent :: find(1) - > orders-> where( 'dateFrom'、 '='、ORDER_CUSTOM_DATE); – Stanislav

+0

@Stanislav何?!? –

+0

これは同様のタスクです。具体的なorder.customDateを使用して、関連するオーダーテーブルからレコードを取得する必要があります。 – Stanislav

関連する問題