簡體   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