[英]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.