【问题标题】:which left join is better in laravel在 laravel 中哪个左连接更好
【发布时间】:2015-01-12 18:55:52
【问题描述】:

我有一个users 表和follows 表和两个模型。我让用户离开连接以从表中获取数据,但我很困惑使用哪个模型和连接表(即)。

$user = Follows::select( 'users.id', 'users.username', 'users.photo' )                              
            ->leftJoin('users', 'follows.fk_users_id', '=', 'users.id')     
            ->where('follows.follower_users_id' ,'=', $id)
            ->get();

$user = Users::select( 'users.id', 'users.username', 'users.photo' )                                
            ->leftJoin('follows', 'follows.fk_users_id', '=', 'users.id')       
            ->where('follows.follower_users_id' ,'=', $id)
            ->get();

我在 Follows 模型中对此进行编码但我只需要来自users 表的数据,它满足follows 表的条件,需要你的帮助,因为我是 laravel 的新手。

我的问题是是使用Follows model and left join users table还是使用Users model and left join follow table

【问题讨论】:

  • But I only need data from users table where it meets the condition with follows table.... 在这种情况下,使用inner join?

标签: php mysql join laravel laravel-4


【解决方案1】:

在您真正分析 Laravel/PDO 在您的条件下创建的结果 SQL 之前,您无法真正判断,即每个表中有多少行,现有索引等。这里有一个提示,在每个选择中引入一个错误并捕获异常消息。它将包含您可以修复并应用于分析器的原始查询,请参阅MySql query analyzer - free solutions

【讨论】:

  • 在查询中引入错误只是为了让它被异常转储不是一个好主意。最好监听查询事件并记录它Event::listen('illuminate.query', function ($query) { }); 或使用$query->toSql() 转储它。
  • @Bogdan 但我没有这样做,也不知道如何在 laravel 中添加任何参考链接
  • @Ronser 要在 Laravel 中监听事件,请查看 Events Docs。要将原始 SQL 查询作为字符串使用 ->toSql() 而不是 ->get()。出于调试目的,我非常喜欢Laravel Debug Bar,它还列出了应用程序运行的所有 SQL 查询。
【解决方案2】:

两个 SQL JOINS 在 SQL 方面是相同的,但是当我们查看 Laravel 中的 ORM 级别时,情况会发生变化。

如果我们使用 Follows 模型,那么您将只能调用 Follows 模型中定义的关系。如果您使用 Users 模型,那么您将能够使用针对 Users 模型定义的关系。

注意在SQL中使用explain,你会发现查询的执行路径是一样的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 2020-07-28
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多