【问题标题】:Laravel multiple joins?Laravel 多个连接?
【发布时间】:2018-07-26 09:54:47
【问题描述】:

我正在尝试通过 leftJoin 取出管理员用户名。 我有一个名为 server_bans_historyusers 的表。

server_bans_history 表有一个名为 steamidadmin_steamid 的唯一行

通过以下方式获取所有数据:

@foreach ($user->BanHistory as $BanHistory)

此代码运行良好,但我不知道热门的 admin_steamid 行,我需要将该 steamid 转换为用户表中的用户名。

因为现在如果我使用{{ $BanHistory->username }},我会得到 BANNED 用户 USERNAME 而不是 ADMIN 用户名。

现在我正在使用代码示例:

$user->BanHistory = DB::table('server_bans_history AS sh')
->leftJoin('users AS us', 'us.steam_id', '=', 'sh.steamid')
->where('sh.steamid', '=', $user->steam_id)
->select("sh.*", "us.*")
->orderBy('sh.date', 'desc')
->get('');

我需要转换 admin_steamid -> user.username

我可以使用多个 leftJoin 或类似的东西吗?

感谢您帮助我理解 leftJoin!

【问题讨论】:

  • 您为什么不直接使用 Eloquent 关系,它将为您处理所有这些,而不必编写大量繁重的连接操作?文档:laravel.com/docs/5.6/eloquent-relationships
  • 感谢@OleHaugset 的回答,但我需要先了解如何使用多个leftJoin :)
  • 更新了我的帖子,以更好地了解我的需求:)

标签: php mysql laravel


【解决方案1】:

我觉得应该是这样的:

$user->BanHistory = DB::table('server_bans_history AS sh')
->leftJoin('users AS us', 'us.steam_id', '=', 'sh.steamid')
->leftJoin('users AS us2', 'us.steam_id', '=', 'sh.admin_steamid')
->where('sh.steamid', '=', $user->steam_id)
->select("sh.*", "us.*", "us2.username as admin_name")
->orderBy('sh.date', 'desc')
->get('');

【讨论】:

  • 通过使用您的示例,我得到了被禁止的用户用户名而不是管理员用户名。我想我需要做一些思考,例如:->where('sh.admin_steamid', '=', $user->steam_id) 但我不知道如何在具有相同表行名称的地方使用 2 :)
  • admin_steamid 是禁止用户的管理员ID吗?
猜你喜欢
  • 2018-07-03
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多