2013-05-14 57 views
4

我有四个表:如何执行在枢轴表的更多内部联接与laravel雄辩

  • 食物:ID,名称
  • 用户:ID,名称
  • mealtypes:ID,名称
  • food_user:ID,food_id,USER_ID,mealtype_id

食物和用户有许多一对多的关系 mealtype有一到一个R与food_user

在端elationship我想有具有以下性质的模型的一个实例: 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 

感谢您的帮助!

回答

4

你可以做这样的事情有口才,查询生成器,假设你有一个模型叫食物:

$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

+0

感谢您的回复,但是,由于某种原因,返回的对象显示用户的姓名正确,但只有mealtype_id而不是它的名字,可能是什么原因? – roelleor

+0

我现在知道,当两个表具有相同的列名时,会发生这种情况。 – roelleor

+0

加入之前,您可以执行如下操作: Food :: select('users.name as user_name','foods.name as food_name','mealtypes.name as mealtype_name') - > joins()... –

1

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