如何使用laravel eloquent在数据透视表上执行额外的内连接

时间:2013-05-14 20:43:17

标签: sql inner-join laravel pivot-table eloquent

我有四张桌子:

  • 食物:id,名称
  • 用户:id,name
  • mealtypes:id,name
  • food_user:id,food_id,user_id,mealtype_id
食物和用户有多对多的关系 mealtype与food_user有一对一的关系

最后,我想要一个具有以下属性的模型实例: food.name,users.name,mealtype.name

正常的sql将是:

SELECT f.name, u.name, m.name FROM foods f
INNER JOIN food_user fu ON f.id = fu.food_id
INNER JOIN users u ON fu.id = u.id 
INNER JOIN mealtypes m ON fu.mealtype_id = m.id

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

你可以用Eloquent和Query Builder做这样的事情,假设你有一个名为Food的模型:

$foods = Food::join('food_user', 'foods.id', '=', 'food_user.food_id')
             ->join('users', 'food_user.user_id', '=', 'users.id')
             ->join('mealtypes', 'food_user. mealtype_id', '=', 'mealtypes.id')
             ->get();

还有关于查询构建器的良好文档:http://www.laravel.com/docs/queries

答案 1 :(得分:1)

一年后回答我自己的问题。我实际上问了错误的问题。数据透视表只是两个表之间的多对多关系。如果表示此多对多关系的表另外与其他表相关,则它不是数据透视表。所以在我的情况下,表food_user应该代表一个雄辩的实体,并且定义了三个关系。