我有四张表。
食物和用户有多对多的关系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
谢谢你的帮助!
你可以用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.comdocsqueries
一年后回答我自己的问题。其实我问错了问题。数据透视表只是两个表之间的多对多关系。如果一个表代表了这种多对多关系,另外还与其他表有关系,那就不是一个数据透视表。所以在我的案例中,表food_user应该在定义了三种关系的情况下,自己代表一个伶俐的实体。
更新,通用解决方案。
我不能给你我在Eloquent方面的最终解决方案,因为我已经很久没有使用它了(也没有在那里实现它),所以我已经没有这方面的知识了。比较笼统的说,需要创建4个模型。
现在,在模型 Meal 中,你需要定义你与其他模型的关系。