假设我有两张桌子。表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”。在刀片视图中,我想用“右”和“左”的数据遍历我的“房间”:
香蕉在哪里?
关于如何使用Laravel进行此操作的任何想法?当然,我可以在刀片视图中进行SQL查询,但由于我知道这是不好的做法,我想知道是否有更简洁的方法来实现相同的结果。
答案 0 :(得分:1)
如果您的房间是固定的,您不需要创建房间表。否则,在水果表中添加房间表的ID作为字段前缀不是一个好主意。你不能以正确的方式加入他们。你应该改变你的表格。 您可以创建第3个映射表。
e.g。
room_fruits [table name]
room_id
left_fruit_id
right_fruit_id
答案 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;
}
}
答案 2 :(得分:0)
只是稍微即兴的@KorayKüpe所说的,您可以按如下方式创建映射表,但保持房间表不变(因为房间可能并不总是固定):
Table: room_fruits
-------------------
id
room_id (from rooms table)
fruit_id (from fruits table)
left (boolean)
right (boolean)
这样,在构建查询时,您可以更轻松地选择仅在左侧或右侧房间的水果