我正在开发一个 PHP Web 应用程序,用户可以在其中创建目的地旅行,并邀请其他用户参加这些旅行。
我有用于Destinations
、Trips
和的 MySql 表Users
,以及一个Invites
用于解决和 之间的多对多关系Users
的表Trips
。
对于这些表中的每一个,我在我的应用程序中创建了一个类(Destinations
一个类、Trips
一个类等)。我为这些类中的每一个编写了一个静态函数,该函数使对象能够被实例化,并从 MySQL 查询中分配它们的属性(因此从SELECT *
查询返回的每一行都会导致实例化对象并分配属性)。
我正在尝试创建一个页面,我的用户可以在其中查看他们计划的所有旅行的详细信息。此页面将显示目的地(从Destinations
)、旅行详情(例如从 开始的日期Trips
)和他们邀请的用户的详细信息(例如来自的用户名Users
),并将所有这些数据放在一个 html 表格中,其中每次旅行都是一行。
为了实现这一点,到目前为止,我一直在实例化Trips
哪些与 user's相关user_id
,哪些Destinations
与Invites
those 相关Trips
,Users
哪些与 those 相关Invites
。然后,我根据需要使用嵌套的 foreach 循环来显示这些,如下所示:
foreach($trips as $trip) {
foreach($invites as $invite) {
foreach($invited_users as $invited_user) {
if($invite->trip_id == $trip->id && $invite->guest_id == $invited_user->id) {
echo $invited_user->name;
} } } }
我可以看到这是可怕的,没有办法做到这一点。
通过阅读,我想我想使用 MySQL 来加入 4 个表,然后只选择与我的相关旅行相关的数据。我不确定的是:
a) 如何从这个 MySQL 结果中实例化对象并正确分配它们的属性?
b)即使完成了,我如何避免昂贵的foreach
循环以在正确的行程旁边显示正确的数据?
是否有以面向对象的方式显示来自多个相关数据库表的数据的“最佳实践”方式?