在 Laravel Eloquent 中连接表值

Posted

技术标签:

【中文标题】在 Laravel Eloquent 中连接表值【英文标题】:Join Table Values in Laravel Eloquent 【发布时间】:2021-05-09 06:58:20 【问题描述】:

我的控制器上有一个 index() 函数,它列出了我的所有用户。目前我可以列出所有用户以及用户的值,但我无法从另一个表中获取信息。这是我尝试在 Eloquent 中复制的 SQL 查询示例。

SELECT user.id, user.name, user.email, user.title, timezones.name FROM users, timezones WHERE user.timezone=timezones.id

我目前显示用户的方式是:

$users = User::latest()->分页(5); return view('users.index', compact('users'));

表结构如下

用户表:

标识 |姓名 |电子邮件 |时区(整数)

时区表:

标识 |名字

要输出数据,这是我的 index.blade.php 文件:

@foreach ($users as $user)
<tr>
<td> $user->name </td>
<td> $user->email </td>
<td> $user->title </td>
<td> $user->timezone </td>
</tr>
@endforeach

【问题讨论】:

【参考方案1】:

一种方法是使用join timezones 表代替:

$users = User::select('user.id', 'user.name', 'user.email', 'user.title', 'timezones.name as timezone')
    ->join('timezones', 'user.timezone', 'timezones.id')
    ->latest()
    ->paginate(5);

【讨论】:

这有助于解决我的问题。最终的解决方案是: $users = User::select('users.id', 'users.name', 'users.email', 'users.title', 'timezones.name AS timezone') ->leftJoin(' timezones', 'users.timezone', 'timezones.id') ->orderBy('users.name', 'ASC') ->paginate(5); @BeatinCakes 很高兴我能帮上忙。另一种选择是将users 表中的timezone 字段重命名为timezone_id,然后在User 模型中创建timezone() belongsTo 关系。

以上是关于在 Laravel Eloquent 中连接表值的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel eloquent 中应用左连接。

Laravel - 使用 Eloquent 从连接关系模型中选择特定列

在 Laravel Eloquent 中使用“with()”函数连接列

使用 eloquent laravel 获取连接表数据

Laravel - Eloquent 连接

Laravel Eloquent 在连接中使用 WHERE 而不是 AND