繁体   English   中英

在Laravel中循环遍历两个表

[英]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”中的数据遍历“房间”:

香蕉在哪里?

  • 厨房右边:2
  • 厨房左:5
  • 卧室右边:0
  • 卧室剩余:0

关于如何使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM