在Laravel中循环通过两张桌子

时间:2017-05-09 07:15:48

标签: php mysql laravel

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

一个例子: 在房间“厨房”,我们右侧有2个香蕉,左侧有5个香蕉。

我的表格根据例子:

id name

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”。在刀片视图中,我想用“右”和“左”的数据遍历我的“房间”:

香蕉在哪里?

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

关于如何使用Laravel进行此操作的任何想法?当然,我可以在刀片视图中进行SQL查询,但由于我知道这是不好的做法,我想知道是否有更简洁的方法来实现相同的结果。

3 个答案:

答案 0 :(得分:1)

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

e.g。

room_fruits [table name]
room_id
left_fruit_id
right_fruit_id

您还应该使用many to many relationship of Eloquent

答案 1 :(得分:1)

首先,您应该重新构建数据库..

<强>房间

id , name

**水果**

id , name , left_qty , right_qty , room_id

然后在 MODEL ROOM

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;
    }
}

REFERENCE

答案 2 :(得分:0)

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

Table: room_fruits
-------------------
id
room_id (from rooms table)
fruit_id (from fruits table)
left (boolean)
right (boolean)

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