Laravel 8 笔记:数据库查询的一些常用写法

查询构造

这是一个laravel中的普通查询;

$query = User::query();

1. 带子条件的普通查询

$query->where(function ($sonQuery) use ($keyword) {
    $sonQuery->where('users.last_name', 'like', "%{$keyword}%")
             ->orWhere('users.first_name', 'like', "%{$keyword}%");
});

2.普通 join查询

$query->leftJoin('logs', 'logs.user_id', '=', 'users.id');

3. 带其他条件的join查询

$query->leftJoin('logs', function ($join) use ($end_date) {
    $join->on('logs.user_id', '=', 'users.id')
         ->whereDate('logs.date', '<=', $end_date);
});

4. 子链接查询

$latestLogs = DB::table('logs')
    ->select('user_id', DB::raw('MAX(created_at) as last_log_created_at'))
    ->groupBy('user_id');

$query->joinSub($latestLogs, 'latest_logs', function ($join) {
    $join->on('users.id', '=', 'latest_logs.user_id');
})->get();

模型关联预加载

1. 预加载添加约束

$users = User::with(['posts' => function ($query) {
    $query->where('title', 'like', '%first%')->orderBy('created_at', 'desc');
}])->get();

2. 延迟预加载加约束

load是在使用单模型且只在访问到关联的信息时才会执行with的懒加载方式。

$author->load(['books' => function ($query) {
    $query->orderBy('published_date', 'asc');
}]);
Laravel 8 笔记:数据库查询的一些常用写法

原文链接:https://beltxman.com/3773.html,若无特殊说明本站内容为 行星带 原创,未经同意禁止转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top