別のテーブルから他のデータと一致させるために使用される重要なデータを引き出すソリューションを探しています。次に、このデータをブレード内に表形式で表示したいと思います。
データベース内には、マッチングに使用したいユーザーの資格情報を格納する「マッチング」エンティティがあります (たとえば、製品の希望価格)。「マッチング」は Web サイト ユーザーに属しているため、エンティティには「peopleID」が含まれます。ユーザーが作成されると、その「一致する」エンティティ内に保存される一致オプションを割り当てます。Matching エンティティ内の行数は、ユーザー作成段階で選択した郡の数によって異なります。
データベースから一致するデータを引き出すには、foreach ループを使用する必要があることを知っています。
私が抱えている問題は、ブレード内でデータを出力するときです。何らかの理由で、配列の最後の項目とのみ製品に一致します。一致するすべての資格情報を持つ製品と一致する必要があります。
コード:
$matchings = Match::where('PeopleID', '=', $id)->get();
$sales = DB::table('sales');
foreach ($matchings as $matching)
{
$county = $matching->county;
$sales->where('county', '=', $county);
}
$results = $sales->get();
そのため、顧客の 1 人に対して、異なる「郡」を持つ 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();
助けてくれて本当にありがとうございます!
@アップデート
関係:
マッチ:
public function people()
{
return $this->belongsTo('People', 'PeopleID', 'PeopleID');
}
人々:
public function matches()
{
return $this->hasMany('Match', 'PeopleID', 'PeopleID');
}
Matchは人々の「検索」資格情報を保持しているため、それらの間に接続があります。あなたが提供した最初のソリューションは完全に機能します。現在、このソリューションは郡ごとに売上を除外しています。これは、最小価格と最大価格 (minprice、maxprice) および brand_a や brand_b などのその他の資格情報でフィルター処理する必要があるため、良い動きです。
brand_a と brand_b の考え方: チェックボックスは、マッチング内で brand_a と brand_b の値を変更する役割を果たします。これらがチェックされている場合、Matching エンティティ内の値は「1」になります。これらがチェックされていない場合、それらは「0」になります。これは、これらの値によって売上を除外する必要がないことを意味します。
Sales エンティティには "Holdings" 属性が含まれています。"Holdings" の値は、brand_a または brand_b にすることができます。売上には「価格」も含まれます。
したがって、これを明確にするために:
販売エンティティには、SaleID、Price、Holdings、County が含まれます。
所蔵は次の値です: brand_a または brand_b。価格はただの数字です。郡はプレーンテキストです。
一致するエンティティには、PeopleID、MinimumPrice、MaximumPrice、brand_a、brand_b、county が含まれます。
PeopleID は外部キーです。どのマッチングがどのユーザーに属しているかを知る必要があります。(選択した郡の数によっては、1 人のユーザーに対して複数のマッチングが存在する可能性があります)。MinimumPrice と MaximumPrice は数値です。brand_a と brand_b は、チェックボックスがオンになっているかどうかに応じた値 (1 または 0) です。郡は郡の名前です。
ここで、person 1543 (peopleID = 1543) に 3 つの一致が含まれ、それぞれに異なる検索資格情報が含まれている場合。
1 番目: PeopleID: 1543 MinimumPrice: 1000 MaximumPrice: 7000 brand_a: 0 brand_b: 1 郡: county_a
2 番目: 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: county_d
このデータを Sales 内のデータと照合する必要があります。さまざまな価格などで 1,000 を超えるさまざまな販売が存在する可能性があります。それらをフィルタリングし、個人のマッチングに基づいて、その人が希望する販売を表示するだけです。
これで状況がよりよくわかることを願っています。ありがとう。