2016-12-11 1 views
0

に参加左、私は以下の表Laravelで複数の関係を照会し、私は今、雄弁で、おそらく少しあまりにもクレイジーな何かをしようとしている別のテーブル

Crons - (Has Many) - Campaign - (Has Many) - Leads - (Has Many) - Conversions 

を持つデータベースを持っている私がする必要がありますはエントリ変換でを持っていないクロンからすべてのリード、取得私が使用してと思ってい

日の最後X量のテーブルa スコープCronモデルですが、ここから進める方法は完全に固まっています。

public function scopeWithValidLeads($query) { 

    return $query->with(['leads' => function($q) { 



    }]); 

} 

私は次のことが真であるところのLEADSを取得する必要があります。

A - リードは、多対多関係を介してCronに関連付けられたキャンペーンに属します。

B - 彼らは、この特定のキャンペーンの下変換テーブルに何のレコードを持っていないか、彼らがしなければ、鉛は日のX量よりも年上であること。

答えて

0

あなたはこのようdoesntHave()メソッドを使用して、目的の結果を得ることができます。

$x = 10; // last 10 days 
$crons = Cron::doesntHave('compaign.leads.conversions') 
      ->whereBetween('created_at', [Carbon::now(), Carbon::now()->addDays($x)]) 
      ->get(); 

クエリ関係不在:モデルのレコードにアクセスする場合は、あなたが不在に基づいて検索結果を絞り込みたいこともあるでしょう関係のたとえば、コメントのないすべてのブログ投稿を取得するとします。

:これを行うには、あなたが私の理解によると、 doesntHave方法更新疑問条件1として

UPDATE

に関係の名前を渡すことがリードをすることによって得ることができます

$leads = Lead::whereHas('compaign', function($q) use($compaign) { 
    $q->has('crons') 
     ->where('id', $compaign->id); 
     // Use the above line if in case of a compaign is to be filtered out 
})->doesntHave('conversions') 
->whereBetween('created_at', [Carbon::now(), Carbon::now()->addDays($x)]) 
->get(); 

希望します。

+0

**コンバージョン**表に鉛が存在する可能性があることは、単に別の* campaign_id *の下に存在することになります。これは本当に難しいことです。 また、あなたが返す解決策は、Crons **が返します。リードのコレクションではありません。 私はリードを取得する必要があります、クロンズではなく、私はそれを確認する必要があります。 'A - リードはCronに関連するキャンペーンに属し、多対多の関係に属します。 ' ' 2 - *コンバージョン*テーブルにレコードはありません**この特定のキャンペーン**彼らがそうするならば、リードは** X日より古い** ** – JonnySerra

+0

私の更新された答えをチェックしてください! –

関連する問題