首页 >数据库 >mysql教程 >如何在 Laravel 中高效连接三个表来检索关注用户的帖子?

如何在 Laravel 中高效连接三个表来检索关注用户的帖子?

Linda Hamilton
Linda Hamilton原创
2024-10-25 07:09:291032浏览

How to Efficiently Join Three Tables in Laravel to Retrieve Posts from Followed Users?

Laravel:连接三个表进行数据检索

在这个场景中,您正在构建一个类似 Twitter 的应用程序,您需要在其中显示当前用户的帖子用户正在关注。由于您有三个表,即 Users、Followers 和 Shares,因此了解如何有效地连接它们对于检索所需数据至关重要。

目标是检索 Shares 表中的 user_id 与Followers 表中的 follower_id,并且 Followers 表中的 user_id 与 Users 表中的 id 匹配。

使用数据库查询生成器

您尝试使用以下查询:

<code class="php">$shares = DB::table('shares')
    ->leftjoin('followers', 'shares.user_id', '=', 'followers.follower_id')
    ->leftjoin('users', 'followers.user_id', '=', 'users.id')
    ->where('users.id', 3)
    ->where('shares.user_id', 'followers.follower_id')
    ->get();</code>

但是,此查询的问题在于分享和关注者的连接条件。正确的连接应该是:

<code class="php">->leftjoin('followers', 'shares.user_id', '=', 'followers.user_id')</code>

使用模型增强功能

建议使用 Laravel 模型来实现更结构化和更高效的数据库操作方法,而不是使用数据库查询构建器.

以下是如何定义模型:

<code class="php">class User extends Model {
    public function shares() {
        return $this->hasMany('Share');
    }
    public function followers() {
        return $this->belongsToMany('User', 'follows', 'user_id', 'follower_id');
    }
    public function followees() {
        return $this->belongsToMany('User', 'follows', 'follower_id', 'user_id');
    }
}
class Share extends Model {
    public function user() {
        return $this->belongsTo('User');
    }
}</code>

使用模型执行查询

定义模型后,您可以执行如下查询:

<code class="php">$my = User::find('my_id');

// Retrieves all shares by users that I follow
// eager loading the "owner" of the share
$shares = Share::with('user')
    ->join('follows', 'follows.user_id', '=', 'shares.user_id')
    ->where('follows.follower_id', '=', $my->id)
    ->get('shares.*'); // Notice the shares.* here

// prints the username of the person who shared something
foreach ($shares as $share) {
    echo $share->user->username;
}</code>

在此示例中,查询检索所有股票,其中 Shares 表中的 user_id 与 Followers 表中的 follower_id 匹配,并且 Followers 表中的 user_id 与 $my 变量中存储的当前用户 ID 匹配。

以上是如何在 Laravel 中高效连接三个表来检索关注用户的帖子?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn