Laravel基于标签获取相关模型

时间:2018-06-24 17:27:34

标签: laravel relation

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

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

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

问题:

我只需要一笔费用就可以得到这些信息。这意味着,我需要收集分配给该费用的所有标签,然后使用这些标签,同时获取分配给这些费用中的一个或多个标签的所有费用。

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

对此有何建议?

我在模型中的关系:

费用:

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

标签:

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

1 个答案:

答案 0 :(得分:1)

解决方案是使用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解决方案要慢一些,但应该没问题。

相关问题