Laravel 根据标签抓取相关机型
Laravel grab related models based on tags
我有两个模型,Expense
和 Tag
,它们具有多对多关系。
对于每个费用,我可以添加多个标签,这些标签使用 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 解决方案稍慢,但应该没问题。
我有两个模型,Expense
和 Tag
,它们具有多对多关系。
对于每个费用,我可以添加多个标签,这些标签使用 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 解决方案稍慢,但应该没问题。