【问题标题】:Laravel, load relationships using JOINLaravel,使用 JOIN 加载关系
【发布时间】:2015-01-24 16:37:08
【问题描述】:

我们都知道使用 Eloquent with('relation') 函数不是在执行 JOIN ,而是在执行另一个查询来获取关系。 有没有办法使用 JOIN 进行单个查询,这样我们就可以减少 MySQL 查询?

【问题讨论】:

    标签: mysql join laravel eloquent relationship


    【解决方案1】:

    是的,如果你想做左连接(使用->join() 进行简单的内连接)

     $query = DB::table('product');
     $query->leftJoin('user', 'product.seller_id', '=','user.user_id');
     return $query->get();
    

    有关详细信息,请参阅查询构建器文档:http://laravel.com/docs/4.2/queries#joins

    【讨论】:

    • 是的,但是这样我们不能得到我们的模型对象。
    • 没错。一旦你使用了 ORM,如果这就是你的意思,你就不能再加入了。查询构建器允许我们进行更多自定义查询。如果需要,您可以进行预加载,但这仍需要 2 个查询。如果你想要一个查询,你必须做一个显式连接,没有工作。
    【解决方案2】:

    据我所知,在使用 Eloquent 对象时不可能使用 JOIN。这就是 Eloquent 的工作方式——它不使用连接,它使用单独的查询来获取相关数据。所以如果你想使用连接,你将无法使用 Eloquent 对象。

    【讨论】:

    • 您可以根据需要使用联接。但是,模型上的结果属性可能不是您想要的。如果您通过模型进行下面的连接,您将拥有一个具有不属于它的属性的模型。所以在这方面我想你不会想要那个。
    【解决方案3】:

    您可以在数据库中创建一个VIEW,然后在您的应用中创建一个模型。 VIEW 中更新的数据会在相关表中自动更新。可能是一种解决方法。

    【讨论】:

      猜你喜欢
      • 2020-04-09
      • 2015-12-16
      • 1970-01-01
      • 2019-06-19
      • 2018-09-26
      • 2017-04-23
      • 2017-06-06
      • 2017-11-26
      • 2017-07-18
      相关资源
      最近更新 更多