最近、私たちのアプリケーションでいくつかの作業を請負業者に依頼しましたが、今はそれをデバッグする必要があります。私はLaravelにとってまだまだ新しく、問題をデバッグするのに苦労しています。彼らはより新しい牧草地のために出発し、助けに利用できません。この結合が正しい結果を印刷しないのはなぜですか? Laravel 5.3
何が起きるべきかは、一致した結果のみの出力です。だから、我々は141の代理店IDを持っていて、彼らは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'));
}
ブレード:@アントニス・Tsimourtosへ
@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);'に変更すると、 1人のユーザーのデータと自分のチェックを行います。私が理解しているところからは、すべてのユーザを取り出し、各ユーザにどのデータが関連付けられているかを見て、 '$ regions、$ preferences、$ languages、$ timecommit'に入れます。また、これらのデータはすべて、 '$ seeker ['id_here_of_user']'のところに '$ seeker'という名前で格納されています。その後、ビューにはすべてのユーザー(求職者)のデータが表示されます。 –