我有「示例」表,「標記」表和中間的「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上找到了一些東西:你應該在Example類中創建一個靜態方法,它返回我需要的東西。但是我顯示數據很麻煩。在上面的代碼中,我將它顯示爲:
@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
有沒有簡單的方法來做到這一點?我發現了一些有關篩選集合,但沒有例子
更新
我找到了一個解決方案:
$examples = $examples->filter(function($example) {
$tags = $example->tags->toArray();
foreach ($tags as $tag) {
if ($tag["name"] == Input::get('tag')) return true;
}
return false;
});
UPDATE2
試圖做到這一點沒有PHP過濾,但我不能得到屬於一個例子的標籤:
$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();
$例子不包含標籤列表(它實際上是空的)
我的替代(in_array)方法怎麼樣,請您檢查一下嗎? –
沒有工作,$ example-> tags-> toArray()不僅返回數組(「tagName1」,「tagName2」...)所以...我試過array_pluck但沒有成功(不知道爲什麼id didn不爲我工作)。 – Victor
您的解決方案是否正常工作? –