私は、別のテーブルの他のデータと一致させるために必要なデータを取り消すソリューションを探しています。次に、このデータを表の形でブレード内に表示したいと考えています。2つの異なるデータベーステーブルのデータを照合して表示する方法
データベース内には、マッチングに使用するユーザーの資格情報(たとえば、製品の希望価格)を格納する「一致」エンティティがあります。エンティティには、「マッチング」がウェブサイトのユーザに属するため、「peopleID」が含まれています。ユーザーが作成されると、その「一致する」エンティティ内に格納されている一致オプションが割り当てられます。一致エンティティ内の行数は、ユーザー作成段階で選択された郡の数によって異なります。
データベースから一致するデータを取り出すには、foreachループを使用する必要があります。
私が抱える問題は、ブレード内にデータを出力することです。何らかの理由で、配列の最後の項目とのみ一致します。 prodtuctsと一致するすべての資格情報と照合する必要があります。
コード:
$matchings = Match::where('PeopleID', '=', $id)->get();
$sales = DB::table('sales');
foreach ($matchings as $matching)
{
$county = $matching->county;
$sales->where('county', '=', $county);
}
$results = $sales->get();
だから私は別の「郡」の2つのマッチングを持つ顧客の一つのために。最後に追加されたデータのみが表示されます。別の郡を含む他の照合用のデータを表示するにはどうすればよいですか。私が何を意味するのか知っていれば幸いです
ありがとうございました。
更新 - コードの大部分が完了しました。ご協力ありがとうございました。
2番目の質問は、残りの一致オプションを追加することです。前述のように、マッチの数は追加された郡の数によって異なります。それぞれのマッチには独自の属性があります。アイデアは、各郡の一致した結果を表示することです。
これを行うには、if文が必要になることがわかります。このコードに
$maxprice = $match->maxprice;
$minprice = $match->minprice;
$brand_a = $match->brand_a;
$brand_b = $match->brand_b;
if($maxprice != '0')
{
$sales = DB::table('sales')->where('maxprice', '<=', $maxprice);
}
if($minprice != '0')
{
$sales = DB::table('sales')->where('minprice', '>=', $minprice);
}
if($brand_a == '1')
{
$sales = DB::table('sales')->where('brand_a', '1');
}
if($brand_b == '1')
{
$sales = DB::table('sales')->where('brand_b', '1');
}
:あなたの助けを
$user = User::find($id); // get our User with the Id (person id?)
$matches = $user->matches; // get all the matches
// or you could one line the above: $matches = User::find($id)->matches;
// get all the counties in the returned matches, could use pluck() method in higher version of laravel
$counties = [];
foreach($matches as $match) {
$counties[] = $match->county;
}
$results = DB::table('sales')->whereIn('county', $counties)->get();
多くのおかげ
は、ここで私が実現したいの例です!
@Update
関係:
マッチ:
public function people()
{
return $this->belongsTo('People', 'PeopleID', 'PeopleID');
}
人物:
public function matches()
{
return $this->hasMany('Match', 'PeopleID', 'PeopleID');
}
私はマッチの人の "検索" の資格情報を保持しているとして、それらの間の接続を持っています。あなたが提供した最初のソリューションは完全に機能します。現在、このソリューションは郡ごとの売上を除外しました。これは、最低価格と上限価格(minprice、maxprice)とbrand_aとbrand_bなどのその他の資格情報でフィルタリングする必要があるため、良い動きです。
brand_aとbrand_bの考え方: チェックボックスは、Matching内のbrand_aとbrand_bの値を変更する責任があります。これらがチェックされている場合、マッチングエンティティ内の値は「1」になります。これらがチェックされていない場合、それらは「0」になります。つまり、売上はそれらの値によって除外される必要はありません。
販売エンティティには「ホールディングス」属性が含まれています。 「ホールディングス」の価値は、brand_aまたはbrand_bとすることができます。販売には「価格」も含まれています。だから、
、これを明確にする:
販売エンティティが含まれていますSaleID、価格、ホールディングス、郡を。
ホールディングスは、brand_aまたはbrand_bの値です。 価格は単なる数値です。 郡は平文です。
マッチングエンティティには、PeopleID、MinimumPrice、MaximumPrice、brand_a、brand_b、countyが含まれます。
PeopleIDは外部キーです。どのマッチングがどのユーザに属するのかを知る必要があります。 (選択された郡の数に応じて、1人のユーザーに複数の一致が存在する可能性があります)。 MinimumPriceとMaximumPriceは数字です。 brand_aとbrand_bは、チェックボックスがオンになっているかどうかに応じた値(1または0)です。 郡は郡の名前です。
人1543(peopleID = 1543)に3つのマッチが含まれ、それぞれに異なる検索資格情報が含まれているようになりました。
第一: PeopleID:1543 MinimumPrice:1000 MaximumPrice:7000 brand_a:0 brand_b:1 郡:county_a
第二: PeopleID:1543 MinimumPrice:2500 MaximumPrice:10000 brand_a :1 brand_b:1 郡:county_f
3番目: PeopleID:1543 MiniumPrice:2000 MaximumPrice:9500 brand_a:0 brand_b:0 郡:私は販売の内部にあるデータに対してこのデータを一致させる必要がある
をcounty_d。価格が異なるなど、1,000以上の異なる売上がある可能性があります。私はそれらをフィルタリングし、人のマッチングに基づいて人が望むSalesを表示するだけです。
私はこれがあなたに状況をより良く願っています。ありがとう。
雄弁にするか、またはDBファサードで? – C2486
@Rishiこのシナリオでうまくいくものは何でも。ありがとう。 –
あなたは4.2を使用していますか? – haakym