"예제"테이블, "태그"테이블 및 중간 "examples_has_tags"테이블이 있습니다. 따라서 하나의 예제는 일부 태그를 가질 수 있으며 하나의 태그는 일부 예제에 속할 수 있습니다.Laravel 4 필터 관계
index.php에서 모든 예제와 태그 목록을 보여줍니다.
$examples = Example::with('tags')->where('public', true)->get();
$tags = Tag::all();
return View::make('index')->with('examples', $examples)
->with('tags', $tags);
완벽하게 작동합니다. 그러나 어떻게 태그 이름으로 예제를 필터링 할 수 있습니까? stackoverflow에서 뭔가를 발견 : 당신이 필요로 반환하는 예제 클래스에서 정적 메서드를 만들어야합니다. 그러나 나는 데이터를 표시하는 데 지저분 해. 위의 코드에서 다음과 같이 표시합니다.
@foreach ($examples as $example)
<div class="widgetbox">
<h4 class="widgettitle">{{ $example->name }}</h4>
<div class="widgetcontent">
{{ $example->body }}
<div class="tags-list">
@foreach ($example->tags as $tag)
<span class="label label-info tag">{{ $tag->name }}</span>
@endforeach
</div>
</div>
</div>
@endforeach
간단한 방법이 있나요? , PHP 필터링없이이 일을 시도
$examples = $examples->filter(function($example) {
$tags = $example->tags->toArray();
foreach ($tags as $tag) {
if ($tag["name"] == Input::get('tag')) return true;
}
return false;
});
갱신 2
: 나는 필터링 컬렉션에 대해 뭔가를 발견하지만 난 다음 해결책을 찾을 수 없습니다 예
갱신
가 없다 하지만 예제에 속한 태그를 얻을 수 없습니다.
이제 (예)class Example extends Eloquent {
public function tags()
{
return $this->hasMany('Tag');
}
}
: 0
$tagId = Tag::where('name', '=', Input::get('tag'))->first()->id;
$examples = Example::with('tags')
->join('examples_has_tags', 'examples_has_tags.example_id', '=', 'examples.id')
->where('examples_has_tags.tag_id', '=', $tagId)->get();
$ 예 태그 목록이 포함되어 있지 않습니다 (Eager Loading)
모델을 다음과 같이 그것을 할 수
내 대안 (in_array) 접근 방법은 무엇입니까? 확인해주세요. –
$ example-> tags-> toArray()는 array ("tagName1", "tagName2"...)가 아니라 array_pluck을 시도했지만 성공하지 못했습니다. 나를 위해 일하지 마라.) – Victor
솔루션은 작동합니까? –