【问题标题】:how join tables of 3 database in laravel如何在laravel中连接3个数据库的表
【发布时间】:2021-04-02 08:23:23
【问题描述】:

我有 3 个数据库,其中 3 个表是相关的。

  1. 第一个表是注册用户,从数据库 1 获得移动
  2. 第二个是用户信息,包含来自数据库的 id、mobile、age 和birth2
  3. 第三,数据库3中具有user_id、log和created_at的用户历史记录

我应该从第一个表中选择所有记录,然后从 table2 中获取 id、age 和birth 以及 mobile 的关系,然后从第三个 table 中获取 log 的总和以及 user_id 的关系。

我在表一中没有用户 ID

在我的视图文件中,我应该显示注册用户列表,包括手机、年龄、出生和日志总和。

我为table1和table2定义了hasOne关系,命名为info,为table2和table3定义了hasMany关系,命名为logs

$users = Table1::query()->with([
        'info',
    ])->paginate(100);

然后在每个用户的刀片视图中$user->info->logs()->where('created_at' ,'>=',$date)->sum('log')

因为表 2 和表 3 有很多数据,我需要最好的查询。 这种方式不合适,因为我有 N+1 用于获取日志

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您想要拥有 3 个不同数据库的任何特定原因。对于不同的数据库,雄辩的关系方法的好处很少丢失。

    假设你的关系被定义为

    • 用户拥有一个用户信息
    • UserInfo 有很多日志
    $users = User::query()
        ->with([
            'info.logs' => fn($query) => $query->whereDate('created_at', '>=', $date)
        ])
        ->paginate(100);
    

    然后在刀片中就可以使用了

    $user->info->logs->sum('log');
    

    【讨论】:

    • 数据库是别人设计的,不知道是什么原因。谢谢,对我有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2019-08-11
    • 2018-08-27
    • 2017-04-11
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多