Laravel根据标签抓取相关模型



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

对于每项费用,我可以添加多个标签,这些标签使用sync存储在数据透视表中。该表称为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 解决方案稍慢,但应该没问题。

最新更新