我們最近有一個承包商在我們的應用上做了一些工作,現在我不得不去調試它。我對Laravel還是比較陌生的,我正在努力調試這個問題。他們已經離開了更新的牧場,無法提供幫助。爲什麼不是這個連接打印正確的結果? Laravel 5.3
應該發生的事情是隻打印匹配結果。假設我們的機構代碼爲141,並且他們有1個首選地區,即東南亞。
讓我們帶用戶252,我們發現他們有多個首選地區,其中1個是東南亞地區。我只想返回匹配的區域。
目前沒有發生。 目前,在用戶252的偏好:
無所謂 - 任何地區 東歐
我們得到的結果是: 東歐 東南亞
我的假設是,這部分代碼這是罪魁禍首? SQL不是我的強項。
/**
* Match regions with 2 given id's
*
* @return Array with the matched regions_id
* @author
**/
public function matchRegions ($itemOne, $itemTwo)
{
return \App\Regionable::selectRaw('count(*) AS cnt, regions_id, description')
->join('regions', 'regions_id', '=', 'regions.id')
->where('regionable_id', $itemOne)
->orWhere('regionable_id', $itemTwo)
->groupBy('regions_id')
->havingRaw('cnt > 1')
->get();
}
public function matchPreferences ($itemOne, $itemTwo)
{
return \App\Preferable::selectRaw('count(*) AS cnt, ministry__prefs_id, description')
->join('ministry_prefs', 'ministry__prefs_id', '=', 'ministry_prefs.id')
->where('preferable_id', $itemOne)
->orWhere('preferable_id', $itemTwo)
->groupBy('ministry__prefs_id')
->havingRaw('cnt > 1')
->get();
}
public function matchLanguages($itemOne, $itemTwo)
{
return \App\Languageable::selectRaw('count(*) AS cnt, language_id, subcategory as description')
->join('languages', 'language_id', '=', 'languages.id')
->where('languageable_id', $itemOne)
->orWhere('languageable_id', $itemTwo)
->groupBy('language_id')
->havingRaw('cnt > 1')
->get();
}
public function matchCommitment($itemOne, $itemTwo)
{
return \App\Timeable::selectRaw('count(*) AS cnt, time__commitment_id, timecommit.description')
->join('timecommit', 'time__commitment_id', '=', 'timecommit.id')
->where('timeable_id', $itemOne)
->orWhere('timeable_id', $itemTwo)
->groupBy('time__commitment_id')
->havingRaw('cnt > 1')
->get();
}
public function prefCount()
{
return (count($this->regions()->get())+count($this->ministry_prefs()->get())+count($this->languages()->get())+count($this->time_commitment()->get()));
}
public function matchSeeker($userIds = [])
{
if(empty($userIds)) $userIds = UserInfo::all()->pluck('id');
$agencyPrefCount = $this->prefCount();
foreach ($userIds as $userId) {
$seekerPrefCount = 0;
$seeker = [];
$regions = $this->matchRegions($this->id, $userId);
$preferences = $this->matchPreferences($this->id, $userId);
$languages = $this->matchLanguages($this->id, $userId);
$timecommit = $this->matchCommitment($this->id, $userId);
if(count($regions) > 0) $seeker['regions'] = $regions;
if(count($preferences) > 0) $seeker['preferences'] = $preferences;
if(count($languages) > 0) $seeker['languages'] = $languages;
if(count($timecommit) > 0) $seeker['timecommit'] = $timecommit;
if(!empty($seeker)) {
$seeker['details'] = UserInfo::findOrFail($userId);
$seekerPrefCount = (count($regions)+count($preferences)+count($languages)+count($timecommit));
if(($agencyPrefCount == 0) || ($seekerPrefCount == 0)) $seeker['relevance'] = 0;
else $seeker['relevance'] = round((($seekerPrefCount/$agencyPrefCount) * 100),2);
$seekers[$userId] = $seeker;
}
}
$seekers = array_reverse(array_values(array_sort($seekers, function ($value) {
return $value['relevance'];
})));
return $seekers;
}
打印出來的結果到視圖工作方式類似這樣:
控制器:
public function getDashboard() {
$agency = Agency::with('ministry_prefs', 'languages', 'time_commitment', 'regions')->findOrFail(Auth::user()->login_id);
$seekers = $agency->matchSeeker();
return view('agency-area.home', compact('agency', 'seekers'));
}
刀片:
@foreach($seekers as $seekerId => $seeker)
<?php
switch (true) {
case ($seeker['relevance'] <= 20) :
$level = 'bg-red';
break;
case (($seeker['relevance'] >= 21) && ($seeker['relevance'] <= 30)):
$level = 'bg-orange';
break;
default:
$level = 'bg-green';
}
?>
<div class="box-comment">
{{ Html::image('img/avatar.jpg', 'User Image', array('class' => 'img-circle img-sm')) }}<!-- User image -->
{{-- <button type="button" class="btn btn-default btn-xs"><i class="fa fa-thumbs-o-up"></i> Like</button> --}}
<div class="comment-text">
<span class="username">
<a href="user/{{ $seeker['details']->id }}">{{((!empty($seeker['details']->name)) ? $seeker['details']->name : $seeker['details']->First_Name." ".$seeker['details']->Last_Name)}} {{$seeker['details']->First_Name." ".$seeker['details']->Last_Name}}</a>
<span class="text-muted pull-right">{{$seeker['details']->created_at}}</span>
{{-- <span class="badge {{$level}}">{{$seeker['relevance']}} % <span class="text-white">Match</span></span> --}}
</span><!-- /.username -->
{{$seeker['details']->Experience}}
<hr/>
<div class="row">
@if(!empty($seeker["regions"]))
<div class="col-xs-3">
<h4>Regions</h4>
@foreach($seeker["regions"] as $region)
<small>{{$region->description}}</small><br/>
@endforeach
</div>
@endif
@if(!empty($seeker["preferences"]))
<div class="col-xs-3">
<h4>Preferences</h4>
@foreach($seeker["preferences"] as $preferences)
<small>{{$preferences->description}}</small><br/>
@endforeach
</div>
@endif
@if(!empty($seeker["languages"]))
<div class="col-xs-3">
<h4>Languages</h4>
@foreach($seeker["languages"] as $commitment)
<small>{{$commitment->description}}</small><br/>
@endforeach
</div>
@endif
@if(!empty($seeker["timecommit"]))
<div class="col-xs-3">
<h4>Commitment</h4>
@foreach($seeker["timecommit"] as $commitment)
<small>{{$commitment->description}}</small><br/>
{{-- {{$commitment->time__commitment_id}} --}}
@endforeach
</div>
@endif
</div>
</div> <!-- /.comment-text -->
</div><!-- /.box-comment -->
@endforeach
所以你希望我們通過代碼:) – webpic
這是一個好問題要問?我有點新。解釋發生了什麼,是的。調試我可以處理。 :) – Mugluck
確保用戶數據更改'$ userIds = UserInfo :: all() - > pluck('id');'到'$ userIds = UserInfo :: find($ id);'所以你只能得到一個用戶的數據並進行自己的檢查。據我所知,它提取所有用戶,然後看到哪些數據與每個用戶相關聯,並將其放在'$ regions,$ preferences,$ languages,$ timecommit'中。此外,所有這些數據都存儲在'$ seeker',其中'$ seeker ['id_here_of_user']''。之後,在視圖中顯示所有用戶(搜索者)的數據。 –