Laravel 根据标签抓取相关机型

Laravel grab related models based on tags

我有两个模型,ExpenseTag,它们具有多对多关系。

对于每个费用,我可以添加多个标签,这些标签使用 sync 存储在数据透视表 table 中。 table 称为 expense_tag

现在,在我的 expenses.show 页面上,显然我想显示有关一项费用的详细信息。但是,我想使用标签关系显示所有相关费用。

问题:

我只花一笔钱得到资料。这意味着,我需要收集分配给该费用的所有标签,然后使用这些标签,获取分配给其中一个或多个标签的所有费用。

我想避免必须使用 foreach 循环来完成此操作。我一直在尝试使用过滤器,但我不确定如何去做。我只是喜欢保持简单。

有什么建议吗?

我模型中的关系:

费用:

public function tags()
{
    return $this->belongsToMany(Tag::class);
}

标签:

public function expenses()
{
    return $this->belongsToMany(Expense::class);
}

解决方案是使用 where in 子句

$tagIds = $expense->tags()->pluck('id')->toArray();
$expenseIds = DB::table('expense_tag')->
    whereIn('tag_id',$tagIds)->pluck('expense_id')->toArray();
$relatedexpenses = Expense::whereIn('id', $expenseIds)->get();

注意:这使用了 3 个查询,因此它可能比完整的 sql 解决方案稍慢,但应该没问题。