다른 테이블의 다른 데이터와 일치시키는 데 필요한 필수 데이터를 철회하는 솔루션을 찾고 있습니다. 그런 다음이 데이터를 테이블 형태로 블레이드 안에 표시하려고합니다.두 개의 서로 다른 데이터베이스 테이블의 데이터를 일치시켜 표시하는 방법
데이터베이스 내부에는 일치시키기 위해 사용하려는 사용자의 자격 증명 (예 : 원하는 제품 가격)을 저장하는 "일치하는"엔터티가 있습니다. 엔터티는 "일치"가 웹 사이트 사용자에게 속한 것처럼 "peopleID"를 포함합니다. 사용자가 생성되면 해당 "일치하는"엔티티에 저장되는 일치하는 옵션을 지정합니다. Matching 엔티티의 행 수는 사용자 생성 단계에서 선택한 카운티 수에 따라 다릅니다.
데이터베이스에서 일치하는 데이터를 철회하려면 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();
그래서 고객 중 하나에 내가 다른 "군"두 matchings 있습니다. 마지막으로 추가 된 데이터 만 표시합니다. 다른 카운티를 포함하는 다른 일치 검색에 어떻게 데이터를 표시 할 수 있습니까? 내가 무슨 뜻인지 알기를 바랍니다.
도움 주셔서 감사합니다.
업데이트 - 코드의 주요 부분이 완료되었습니다. 도와 줘서 고마워.
두 번째 질문은 나머지 일치 옵션을 추가하는 것입니다. 앞에서 언급했듯이 일치 횟수는 추가 된 카운티 수에 따라 다릅니다. 각 일치에는 고유 한 속성이 있습니다. 아이디어는 각 카운티마다 일치하는 결과를 보여주는 것입니다.
이렇게하려면 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');
}
나는 그 사이의 연결을 가지고있다. 당신이 제공 한 첫 번째 솔루션은 완벽하게 작동합니다. 이제이 솔루션은 카운티별로 매출을 필터링 했으므로 최소 및 최대 가격 (최소 가격, 최대 가격) 및 brand_a 및 brand_b와 같은 기타 자격 증명으로 필터링해야하므로 좋은 조치입니다.
brand_a 및 brand_b의 아이디어 : 체크 박스는 Matching에서 brand_a 및 brand_b 값을 변경해야합니다.이것들을 체크하면 일치하는 엔티티 내의 값이 '1'이됩니다. 확인되지 않은 경우 '0'이되어 판매가 해당 값으로 필터링되지 않아도됩니다.
판매 법인은 "보유"속성을 포함합니다. 'Holdings'의 가치는 brand_a 또는 brand_b 일 수 있습니다. 판매에는 "가격"도 포함됩니다.
그래서,이 명확하게하기 :판매 법인에는 다음이 포함 SaleID, 가격, 보유, 카운티.
홀딩스는 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 개의 일치 항목이 있고 여기에 각각 다른 검색 자격 정보가 포함되어 있습니다.
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
세 번째 : 피플 ID : 1543 012 3,516,MiniumPrice : 2000 MaximumPrice : 9500 brand_a : 0 brand_b : 0 카운티 : 나는이 판매 내부에있는 데이터에 대해 데이터를 일치 할 필요
을 county_d. 다른 가격으로 1000 가지가 넘는 판매가있을 수 있습니다. 나는 그들을 필터링하고 사람의 매칭을 기반으로 원하는 판매를 표시해야합니다.나는이 상황이 당신에게 더 좋기를 바랍니다. 감사.
웅변이나 DB 외관으로? – C2486
@ 리시 시나리오가 더 잘 작동합니다. 감사. –
당신은 4.2를 사용하고 있습니까? – haakym