Php 在Laravel中遍历两个表

Php 在Laravel中遍历两个表,php,mysql,laravel,Php,Mysql,Laravel,假设我有两张桌子。表1称为“房间”,表2称为“水果”。每个房间都有一个左右两侧,桌上的水果“水果”将放在房间的左侧或右侧 例如: 在“厨房”房间里,我们有两个香蕉在右边,五个香蕉在左边 我的表格符合以下示例: 房间 身份证名称 1厨房 两居室 果实 id | name | 1 |右| 1 |左| 2 |右| 2 |左 1 |苹果| 0 | 0 | 0 | 0 2 |香蕉| 2 | 5 | 0 | 0 正如你所看到的,“1_right”是“kitchenID_right”。在blade视图中,我想

假设我有两张桌子。表1称为“房间”,表2称为“水果”。每个房间都有一个左右两侧,桌上的水果“水果”将放在房间的左侧或右侧

例如: 在“厨房”房间里,我们有两个香蕉在右边,五个香蕉在左边

我的表格符合以下示例:

房间 身份证名称

1厨房

两居室

果实 id | name | 1 |右| 1 |左| 2 |右| 2 |左

1 |苹果| 0 | 0 | 0 | 0

2 |香蕉| 2 | 5 | 0 | 0

正如你所看到的,“1_right”是“kitchenID_right”。在blade视图中,我想使用“右”和“左”的数据循环我的“房间”:

香蕉在哪里

  • 右厨房:2
  • 厨房左:5
  • 右卧室:0
  • 左卧室:0

有没有关于我如何和拉威尔一起做这件事的想法?当然,我可以在blade视图中执行sql查询,但由于我知道这是一种不好的做法,我想知道是否有更干净的方法来实现相同的结果。

如果您的房间是固定的,则不需要创建房间表。否则,在水果表中添加房间表的ID作为字段前缀不是一个好主意。你不能以适当的方式加入他们。你应该改变你的桌子。 您可以创建第三个映射表

e、 g


您还应该使用。

首先,您应该按照以下方式重新构建数据库

房间

id , name
public function room()
{
    return $this->belongsTo('App\Room');
}
**果实**

id , name , left_qty , right_qty , room_id
然后在您的模型室

public function fruits()
{
    return $this->hasMany('App\Fruit');
}
在您的模型水果中

id , name
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;
    }
}

仅是@Koray Küpe所说的一点即兴创作,您可以按如下方式创建映射表,但保持房间表不变(因为房间可能并不总是固定的):


这样,在构建查询时,您可以更轻松地选择仅位于左侧或右侧房间的水果

您可以建立关系谢谢您,Koray!我希望在没有旋转台的情况下也能达到同样的效果,因为房间已经修好了。谢谢你,Demonyowh!我的“水果”桌相当大,我试着绕过多排“相同的水果”。谢谢你,班古拉特克!在尝试绕过数据透视表之前,我更喜欢您的解决方案。唯一的区别是“left”和“right”不是布尔值,因为我可以直接在这些字段中存储水果的数量。