【问题标题】:Join Table Values in Laravel Eloquent在 Laravel Eloquent 中连接表值
【发布时间】:2023-03-12 05:55:01
【问题描述】:

我的控制器上有一个 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

【问题讨论】:

    标签: php mysql laravel eloquent laravel-blade


    【解决方案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 关系。
    猜你喜欢
    • 2019-12-06
    • 2023-04-03
    • 1970-01-01
    • 2019-09-06
    • 2018-08-07
    • 2021-01-05
    • 2016-07-22
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多