查询构造
这是一个 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');
}]);