我有一个Laravel数据库,其中包含tags
表,items
表和item_tag
表。标签是分层的,因此,我试图查询在循环中设置了哪些标签。
这很简单,我只是使用$item->tags
,它会在可访问的对象中提供我的标记,随时可以循环播放。
在显示所有标记列表时,我想检查是否设置了特定对象时出现问题。我使用以下代码进行测试:
function buildTree($tags, $selected = null) {
echo "<ul>";
foreach($tags as $tag) {
echo "<li>";
if($selected[$tag->id]) {
echo "<strong>";
}
echo $tag->name;
if($selected[$tag->id]) {
echo "</strong>";
}
if($tag->children) {
buildTree($tag->children);
}
echo "</li>";
}
echo "</ul>";
}
$item = Item::find(1);
$tags = Tag::whereNull('tag_id')->get();
buildTree($tags, $item->tags);
预期输出将是所选的每个标记在树中以粗体显示。当然,如果发生这种情况,我不会发布这个。相反,它只是突出显示树中的第一个项目,即使它没有被选中。 (那是因为$selected
不应该以这种方式解决。)
获取此信息的正确方法是什么?
答案 0 :(得分:0)
那是因为选择的$不应该以这种方式解决
然后如何解决?当然答案就在于答案,因为你依靠选择$来检查选择了哪些标签。
根据您的评论,以下内容应解决您的问题
从此更改您的if条件 -
if($selected[$tag->id])
到此 -
if(array_in($tag->id, $selected))
答案 1 :(得分:0)
我使用contains
在Laravel中使用Collections API找到了一个正常运行的解决方案。
if($selected != null && $selected->contains('id', $tag->id))
这似乎是查找数据的最便捷方式,它在我的应用程序中完美运行。