子查询(Sub Query),也称作内查询(Inner Query)或嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询。
User::whereIn('id', function($query){
$query->select('user_id')
->from('admin_user')
->whereIn('type', ['1', '2']);
})->get();
获得的 SQL 如下:
SELECT * FROM `user` where `id` IN (
SELECT `user_id` FROM `admin_user` WHERE `type` IN (1, 2)
$sub = Abc::where(..)->groupBy(..); // Eloquent Builder instance
$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
->mergeBindings($sub->getQuery())
->count();
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Query
$son = [1,2,3];
$sql = "select * from orders where recuid in ({$son}) order by createtime";
DB::table(DB::raw("({$sql}) as cash"))->groupBy("recuid")->g...
您可以使用 Laravel 的 Eloquent ORM 和递归方法来实现多级父子表查询整合成树的功能。
首先,您需要定义您的模型,并且在模型中定义表的关系。假设您的表名为 `categories`,那么您的模型代码可能如下所示:
```php
class Category extends Model
public function parent()
return $this->belongsTo(Category::class, 'parent_id');
public function children()
return $this->hasMany(Category::class, 'parent_id');
在上面的代码中,我们定义了 `parent()` 方法和 `children()` 方法来表示当前分类的父分类和子分类,这里使用了 Laravel 的 Eloquent ORM 中的关系映射方法。
接下来,您可以编写一个递归方法来将您的分类表数据整合成树形结构。代码如下:
```php
function buildTree($categories, $parentId = null) {
$branch = [];
foreach ($categories as $category) {
if ($category->parent_id == $parentId) {
$children = buildTree($categories, $category->id);
if ($children) {
$category->children = $children;
$branch[] = $category;
return $branch;
在上面的代码中,我们使用了递归的方式,从顶级分类开始,递归地查询当前分类的子分类,并将它们整合成树形结构。
最后,您可以在控制器中调用这个方法,并将查询到的分类数据传递给它,代码如下:
```php
use App\Models\Category;
class CategoryController extends Controller
public function index()
$categories = Category::all();
$tree = buildTree($categories);
return view('categories.index', ['categories' => $tree]);
在上面的代码中,我们首先查询了所有的分类数据,然后调用 `buildTree()` 方法将分类数据整合成树形结构,并将整合后的数据传递给视图渲染。