检查是否使用Laravel数据透视表设置了某些内容

时间:2016-06-05 18:38:14

标签: php mysql laravel eloquent hierarchy

我有一个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不应该以这种方式解决。)

获取此信息的正确方法是什么?

2 个答案:

答案 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))

这似乎是查找数据的最便捷方式,它在我的应用程序中完美运行。