如何使用laravel雄辩地在数据透视表上执行其他内部联接 [英] how to perform additional inner join on pivot table with laravel eloquent

查看:89
本文介绍了如何使用laravel雄辩地在数据透视表上执行其他内部联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有四个表:

  • 食物:id,名称
  • 用户:id,名称
  • 膳食类型:身份证,姓名
  • food_user:ID,food_id,user_id,meattype_id
食物与使用者之间存在多对多关系 进餐类型与food_user有一对一的关系

最后,我想拥有一个具有以下属性的模型实例: food.name,users.name,meattype.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

感谢您的帮助!

解决方案

您可以使用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/查询

I have four tables:

  • foods: id, name
  • users: id, name
  • mealtypes: id, name
  • food_user: id, food_id, user_id, mealtype_id

foods and user have a many-to-many relationship mealtype has a one-to-one relationship with food_user

In the end I would like to have an instance of a model with the following properties: food.name, users.name, mealtype.name

normal sql would be:

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

Thanks for any help!

解决方案

You could do something like this with Eloquent and Query Builder, assuming you have a model named 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();

There's a good documentation about the query builder too: http://www.laravel.com/docs/queries

这篇关于如何使用laravel雄辩地在数据透视表上执行其他内部联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆