2016-07-26 10 views
-1

こんにちは、関連する基準でアカウントからメールを抽出したいクエリを書きました。だから、例えば私が都市からメールを送りたいのであれば、都市を選んでこの都市の人にメールを送ることができます。しかし、都市を選んでいなければ、これを認識せずにすべての人に送ってください。Laravelの基準によるデータベースからのデータの抽出

私の質問基準によるデータの抽出には最良の方法はありますか? 1つのクエリを書かなければならないのですか、それを行う最善の方法は何ですか?

+0

これはすべての入力がオプションなので、管理者が入力を選択しなかった場合、データベースからのすべての電子メールを返すはずですが、都市を選択した場合、この都市に絞り込む必要があります – Adrian

答えて

0

私はあなたが本当にやっていることを知りませんが、Laravelの基本的な理解に基づいており、あなたはさまざまな "フラグ"や "基準"を使って何かをしようとしているようですが、各基準に基づいて、メインのコレクションに追加し、メインコレクションのクエリプロパティは、すべてに追加されると、その後の電子メールアドレスを取得する例:。

// Start with your Account, ordered by ID: 

$accounts = Account::orderBy('id'); 

// if a city ID is provided, add this to the "where" section of the main collection: 

if($this->city_id !== NULL) { 
    $accounts->where('location_id', $this->city_id); 
} 

// if an Account Type is provided, add this to the "where" section of the main collection: 

if ($this->account_type !== NULL) { 
    $accounts->where('type_id', $this->account_type); 
} 

// if Premium Only is set, add this to the "where" section of the main collection: 
if ($this->only_premium == TRUE) { 
    $accounts->where('is_premium', $this->only_premium); 
} 

// if Free Only is set, add this to the "where" section of the main collection: 

if ($this->only_free == TRUE) { 
    $accounts->where('is_premium', $this->only_free); 
} 

/* For those last two, it's a bit confusing whether only_free and  only_premium are mutually exclusive, 
so maybe consider having one property that toggles between Free/Premium 
(assuming it can't be both but must be one or the other). */ 

// Finally, pull the emails (the "plucking" off of the final $accounts collection variable: 

    $emailAccounts = $accounts->get()->pluck('email')->toArray(); 

私はかなり確信している。この例のコードの少なくとも一部基本的には間違っていますが、あなたがしたいことについては根本的にもっと論理的で明確です。

+0

これを行うようにしましたが、データベースから正しく取得されます。たとえば、都市=ニューヨークとaccoutpremium = trueの場合、市=ニューヨークとのすべての電子メールを持っていますが、他の都市の人々がaccout = premiumの付いた追加のメールを持っていますが、それらはプレミアムを持つため配列に追加しました – Adrian

+0

それが送信している生のクエリを取得する必要があります。次のようにSOの答えが含まれているようです:http://stackoverflow.com/a/18236656/49478 – Anthony

+0

あなたが望むクエリはSELECT * FROM accountsのようなものです WHERE location_id = "New York City" AND is_premium = 1'しかし、代わりに、実行されているクエリがSELECT * FROMアカウントのようなものであることを示唆する結果が得られています WHERE location_id = "New York City" OR is_premium = 1'したがって、どちらかの条件が真の場合、結果は得られますか? – Anthony

関連する問題