【发布时间】:2015-02-11 03:09:32
【问题描述】:
不确定我是否正确设置。在 Laravel 中,我正在创建两个具有多对可能关系的模型
型号为Item 和Tags。每个都包含一个belongsTo 到另一个。
当我像这样运行查询时:
Item::with('tags')->get();
它返回items 的集合,每个项目都包含一个tags 集合。然而,集合中的每个标签还包含我不需要的 pivot 数据。这里是json格式:
[{
"id":"49",
"slug":"test",
"order":"0","tags":[
{"id":"3","name":"Blah","pivot":{"item_id":"49","tag_id":"3"}},
{"id":"13","name":"Moo","pivot":{"item_id":"49","tag_id":"13"}}
]
}]
有没有办法阻止这些数据进入
【问题讨论】:
-
这是stackoverflow.com/questions/20887530/… 的明显重复项 - 请删除赏金,以便我们将其作为重复项关闭。
-
这似乎只在我执行
->toArray()或->toJson()时有效,但如果我只是打印出$item->tags,我仍然会在对象中看到枢轴数据。似乎它在进行不必要的查询,因为我没有尝试访问数据透视表中的任何数据。仍然想要一个答案。 -
例如,如果我要直接通过枢轴编写查询:
SELECT t.* FROM tags AS t JOIN city_tag AS ct WHERE ct.item_id = 111; -
不,API 应该是这样工作的。通过提供数据透视数据也不会浪费更多的资源(可能除了从数据库传输它们的带宽)。而且我认为您确实明白,除了 数据透视表 之外,没有其他方法可以实现多对多关系。
$hidden是一个 API feature(Eloquent 的),因此只有在您使用 API(toArray、toJson)时才可用。对象的 PHP 转储显然会显示其中的所有信息。这里没有其他答案。 -
Eloquent 生成的查询会接近这个:
SELECT t.*, ct.* FROM tags AS t JOIN city_tag AS ct WHERE ct.item_id = 111;- 这里没有真正的性能损失...
标签: php laravel tags pivot-table