我正在寻找一种解决方案,该解决方案将提取用于匹配来自不同表的其他数据的基本数据。然后我想以表格的形式在刀片中显示这些数据。
在数据库内部,我有一个“匹配”实体,它存储我想用于匹配的用户凭据(例如所需的产品价格)。实体包含“peopleID”作为“匹配”属于网站用户。创建用户时,我们分配匹配选项,这些选项存储在该“匹配”实体中。匹配实体中的行数取决于在用户创建阶段选择的县数。
我知道要从数据库中提取匹配数据,我需要使用 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();
因此,对于其中一位客户,我有两个不同“县”的匹配项。它只显示最后添加的数据。我怎样才能让它显示包含不同县的其他匹配的数据。我希望你知道我的意思。
谢谢你的帮助。
更新 - 代码的主要部分已完成。谢谢您的帮助。
第二个问题是关于添加其余匹配选项。如前所述,匹配的数量取决于添加的县的数量。每场比赛都有自己的属性。这个想法是显示每个县的匹配结果。
我知道我需要一些 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 的思想:复选框负责改变Matching 中的brand_a 和brand_b 值。如果选中这些,匹配实体内的值将变为“1”。如果未选中这些,它们将变为“0”,这意味着销售额不必被这些值过滤掉。
销售实体包含“Holdings”属性。“Holdings”的值可以是brand_a 或brand_b。销售还包含“价格”。
因此,为了明确这一点:
销售实体包含:SaleID、Price、Holdings、County。
持有是值:brand_a 或brand_b。价格只是一个数字。县是纯文本。
匹配实体包含:PeopleID、MinimumPrice、MaximumPrice、brand_a、brand_b、county。
PeopleID 是外键。我们需要知道哪个匹配属于哪个用户。(根据所选县的数量,一个用户可以有多个匹配项)。MinimumPrice 和 MaximumPrice 是数字。brand_a 和 brand_b 是值(1 或 0),具体取决于复选框是否被选中。县是县名。
现在,如果人员 1543 (peopleID = 1543) 包含 3 个匹配项,每个匹配项包含不同的搜索凭据。
第一个:PeopleID:1543 最低价格:1000 最高价格:7000 品牌_a:0 品牌_b:1 县:county_a
第二: PeopleID:1543 最低价格:2500 最高价格:10000 品牌_a:1 品牌_b:1 县:county_f
第三: PeopleID:1543 MiniumPrice:2000 MaximumPrice:9500 brand_a:0 brand_b:0 县:county_d
我需要将此数据与 Sales 中的数据进行匹配。可以有超过 1,000 种不同价格的不同销售等。我只需要过滤它们并根据人的匹配显示该人所需的销售。
我希望这能更好地向您展示这种情况。谢谢。