Php 为什么DB::table中的leftJoin的结果与DB::select中的leftJoin不同?

Php 为什么DB::table中的leftJoin的结果与DB::select中的leftJoin不同?,php,laravel,laravel-5.7,laravel-pagination,Php,Laravel,Laravel 5.7,Laravel Pagination,我使用的是DB::select和DB::table,但结果不同。我不知道为什么DB::table中的leftJoin与DB::select中的leftJoin的结果不同。DB::table中的leftJoin的结果与DB::select中的Join相同。我的SQL如下所示 $items = DB::select('select element_designs.id as element_design_id, element_designs.doc_no, elements.id

我使用的是DB::select和DB::table,但结果不同。我不知道为什么DB::table中的leftJoin与DB::select中的leftJoin的结果不同。DB::table中的leftJoin的结果与DB::select中的Join相同。我的SQL如下所示

$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', 'element_designs.id', '=', 'elements.element_design_id')
    ->where('elements.deleted_at', null)
    ->leftJoin('tag_mappings', 'elements.id' , '=', 'tag_mappings.element_id')
    ->where('tag_mappings.deleted_at', null)
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);
$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', function($join){
        $join->on('element_designs.id', '=', 'elements.element_design_id')
            ->where('elements.deleted_at', null);
    })
    ->leftJoin('tag_mappings', function($join){
        $join->on('elements.id' , '=', 'tag_mappings.element_id')
            ->where('tag_mappings.deleted_at', null);
    })
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);
DB::select的结果是30行。DB::table的结果是4行。为什么DB::table的leftJoin子句与DB::select的leftJoin具有不同的结果? 我使用的是Laravel5.7

非常感谢你!
BienHV

上述代码中的leftJoin将与join子句具有相同的结果。我修复了advanced leftJoin子句的问题,如下所示

$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', 'element_designs.id', '=', 'elements.element_design_id')
    ->where('elements.deleted_at', null)
    ->leftJoin('tag_mappings', 'elements.id' , '=', 'tag_mappings.element_id')
    ->where('tag_mappings.deleted_at', null)
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);
$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', function($join){
        $join->on('element_designs.id', '=', 'elements.element_design_id')
            ->where('elements.deleted_at', null);
    })
    ->leftJoin('tag_mappings', function($join){
        $join->on('elements.id' , '=', 'tag_mappings.element_id')
            ->where('tag_mappings.deleted_at', null);
    })
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);

上述代码中的leftJoin将与join子句具有相同的结果。我修复了advanced leftJoin子句的问题,如下所示

$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', 'element_designs.id', '=', 'elements.element_design_id')
    ->where('elements.deleted_at', null)
    ->leftJoin('tag_mappings', 'elements.id' , '=', 'tag_mappings.element_id')
    ->where('tag_mappings.deleted_at', null)
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);
$items = DB::select('select
    element_designs.id as element_design_id, element_designs.doc_no,
    elements.id as element_id, element_designs.project_id as project_id, 
    tag_mappings.id as tag_mappings_id,
    tag_mappings.created_at as create_time,
    element_designs.element_name, elements.element_seq_id,
    edes.material_name
from element_designs 
    join elements
        on element_designs.id = elements.element_design_id 
        and elements.deleted_at is null
    left join tag_mappings 
        on elements.id = tag_mappings.element_id 
        and tag_mappings.deleted_at is null 

where element_designs.disable_flg = false and element_designs.project_id = 1
    order by element_designs.id');

$items = DB::table('element_designs')
    ->join('elements', function($join){
        $join->on('element_designs.id', '=', 'elements.element_design_id')
            ->where('elements.deleted_at', null);
    })
    ->leftJoin('tag_mappings', function($join){
        $join->on('elements.id' , '=', 'tag_mappings.element_id')
            ->where('tag_mappings.deleted_at', null);
    })
    ->where('element_designs.disable_flg', false)
    ->where('element_designs.project_id', 1)
    ->orderBy('element_designs.id', 'asc')
    ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.project_id as project_id',
        'tag_mappings.created_at as create_time', 'tag_mappings.id as tag_mappings_id', 'element_designs.element_name', 'elements.element_seq_id',
        'element_designs.material_name')
    ->paginate(20);

DB::select和DB::table之间没有太大区别,只是DB::select不能保护您免受SQL注入的影响。您是否可以检查get()而不是paginate(20)?DB::select和DB::table之间没有太大区别,除了DB::select不能保护您免受SQL注入之外。您是否可以检查get()而不是paginate(20)?