laravel leftjoin 只取一条 查询右表条件 带分页
时间: 2023-08-10 15:08:27 浏览: 46
你可以使用 `distinct` 和 `limit` 方法来限制左连接查询结果只返回一条记录。
例如,假设你要查询 `users` 表和 `posts` 表,其中 `users` 表和 `posts` 表的关联字段为 `user_id`。现在你要查询所有用户,并且只取每个用户的最新一篇文章,可以使用以下代码:
```php
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->select('users.*', 'posts.title', 'posts.created_at')
->whereRaw('posts.id IN (SELECT MAX(id) FROM posts GROUP BY user_id)')
->orderBy('users.id', 'asc')
->paginate(10);
```
在上面的代码中,我们使用了 `leftJoin` 方法进行左连接查询,使用 `whereRaw` 方法指定了只查询每个用户的最新一篇文章,使用 `orderBy` 方法对用户进行排序,最后使用 `paginate` 方法进行分页查询。
需要注意的是,由于我们使用了 `leftJoin` 方法,如果某个用户没有对应的文章,那么该用户的文章信息将会是 `null`。如果你想要过滤掉没有文章的用户,可以使用 `whereNotNull` 方法进行过滤:
```php
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->select('users.*', 'posts.title', 'posts.created_at')
->whereRaw('posts.id IN (SELECT MAX(id) FROM posts GROUP BY user_id)')
->whereNotNull('posts.id')
->orderBy('users.id', 'asc')
->paginate(10);
```
这样就可以过滤掉没有文章的用户了。