在 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 从连接关系模型中选择特定列