[英]Loop through two tables in Laravel
假设我有两个桌子。 表1称为“房间”,表2称为“水果”。 在每个房间中,都有一个左侧和右侧,“水果”表中的水果将被放置在房间的左侧或右侧。
例如:在“厨房”房间中,我们在右侧有2个香蕉,在左侧有5个香蕉。
我的表根据示例:
身份证名
1个厨房
2间卧室
id | 名称| 1_right | 1_left | 2_right | 2_left
1 | 苹果| 0 | 0 | 0 | 0
2 | 香蕉| 2 | 5 | 0 | 0
如您所见,“ 1_right”是“ kitchenID_right”。 在刀片视图中,我想使用“ right”和“ left”中的数据遍历“房间”:
香蕉在哪里?
关于如何使用Laravel做到这一点的任何想法? 当然,我可以在刀片视图中执行sql查询,但是由于我知道这是一种不好的做法,所以我想知道是否有一种更干净的方法来实现相同的结果。
如果您的房间是固定的,则无需创建房间表。 否则,将房间表的ID添加为水果表中的字段前缀不是一个好主意。 您无法以适当的方式加入他们。 您应该更改表格。 您可以创建第3个-mapping-表。
例如
room_fruits [table name]
room_id
left_fruit_id
right_fruit_id
您还应该使用Eloquent的多对多关系 。
首先,您应该按以下方式重新构建数据库。
客房
id , name
** 水果 **
id , name , left_qty , right_qty , room_id
然后在您的模型室中
public function fruits()
{
return $this->hasMany('App\Fruit');
}
在您的模型水果中
public function room()
{
return $this->belongsTo('App\Room');
}
所以在控制器中你可以做
$rooms = Room::all();
foreach($rooms as $room)
{
echo $room->name;
foreach($room->fruits as $fruit)
{
echo $fruit->name . ': (right)' . $fruit->right_qty . ' (left)' . $fruit->left_qty;
}
}
@KorayKüpe所说的只是一点点即兴创作,您可以按如下方式创建映射表,但要保持Rooms表不变(因为不一定总是固定房间):
Table: room_fruits
-------------------
id
room_id (from rooms table)
fruit_id (from fruits table)
left (boolean)
right (boolean)
这样,您在构建查询时可以更轻松地选择仅位于左侧或右侧空间的水果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.