Я ищу решение, которое бы удаляло важные данные, используемые для сопоставления с другими данными из другой таблицы. Затем я хотел бы отобразить эти данные внутри блейда в виде таблицы.
Внутри базы данных у меня есть «совпадающий» объект, в котором хранятся учетные данные пользователя, которые я хотел бы использовать для сопоставления (например, желаемая цена продукта). Сущность содержит «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();
Итак, для одного из клиентов у меня есть два совпадения с разными «округами». Он отображает данные только для последнего добавленного. Как я могу заставить его отображать данные для другого сопоставления, которое содержит другой округ. Надеюсь, вы понимаете, что я имею в виду.
Спасибо за любую помощь.
Обновление. Основная часть кода выполнена. Спасибо за помощь.
Второй вопрос касается добавления остальных вариантов соответствия. Как указывалось ранее, количество совпадений зависит от количества добавленных округов. Каждое совпадение имеет свои атрибуты. Идея состоит в том, чтобы показать совпадающие результаты для каждого округа.
Я знаю, что для этого мне понадобятся операторы 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. Если они отмечены флажком, значения внутри объекта Matching становятся равными «1». Если они не отмечены флажком, они становятся равными «0», что означает, что продажи не нужно отфильтровывать по этим значениям.
Сущность продажи содержит атрибут «Хранения». Значение «Holdings» может быть brand_a или brand_b. Продажи также содержит «Цена».
Итак, чтобы было понятно:
Объект продажи содержит: SaleID, Price, Holdings, County.
Холдинги — это значения: brand_a или brand_b. Цена - это просто число. Графство представляет собой обычный текст.
Соответствующий объект содержит: PeopleID, MinimumPrice, MaximumPrice, brand_a, brand_b, округ.
PeopleID — это внешний ключ. Нам нужно знать, какое совпадение принадлежит какому пользователю. (может быть несколько совпадений для одного пользователя в зависимости от количества выбранных округов). MinimumPrice и MaximumPrice — это числа. brand_a и brand_b — это значения (1 или 0) в зависимости от того, были ли отмечены флажки. Графство — это название графства.
Теперь, если человек 1543 (peopleID = 1543) содержит 3 соответствия, каждое из которых содержит разные учетные данные для поиска.
1-й: PeopleID: 1543 Минимальная цена: 1000 Максимальная цена: 7000 brand_a: 0 brand_b: 1 округ: округ_a
2-й: PeopleID: 1543 Минимальная цена: 2500 Максимальная цена: 10000 brand_a: 1 brand_b: 1 округ: округ_f
3-й: PeopleID: 1543 MiniumPrice: 2000 Максимальная цена: 9500 brand_a: 0 brand_b: 0 округ: округ_d
Мне нужно сопоставить эти данные с данными, которые находятся внутри файла Sales. Может быть более 1000 различных продаж с разными ценами и т. д. Мне просто нужно отфильтровать их и отобразить продажи, которые хочет человек, на основе совпадения людей.
Я надеюсь, что это лучше представляет вам ситуацию. Спасибо.
People
, вам нужно было быSale
для каждой из них? - person haakym   schedule 23.07.2016