app/Http/Controllers/AdminTreesController.php
private function countCommonXrefs(Tree $tree1, Tree $tree2): int
    {
        $subquery1 = DB::table('individuals')
            ->where('i_file', '=', $tree1->id())
            ->select(['i_id AS xref'])
            ->union(DB::table('families')
                ->where('f_file', '=', $tree1->id())
                ->select(['f_id AS xref']))
            ->union(DB::table('sources')
                ->where('s_file', '=', $tree1->id())
                ->select(['s_id AS xref']))
            ->union(DB::table('media')
                ->where('m_file', '=', $tree1->id())
                ->select(['m_id AS xref']))
            ->union(DB::table('other')
                ->where('o_file', '=', $tree1->id())
                ->whereNotIn('o_type', ['HEAD', 'TRLR'])
                ->select(['o_id AS xref']));

        $subquery2 = DB::table('change')
            ->where('gedcom_id', '=', $tree2->id())
            ->select(['xref AS other_xref'])
            ->union(DB::table('individuals')
                ->where('i_file', '=', $tree2->id())
                ->select(['i_id AS xref']))
            ->union(DB::table('families')
                ->where('f_file', '=', $tree2->id())
                ->select(['f_id AS xref']))
            ->union(DB::table('sources')
                ->where('s_file', '=', $tree2->id())
                ->select(['s_id AS xref']))
            ->union(DB::table('media')
                ->where('m_file', '=', $tree2->id())
                ->select(['m_id AS xref']))
            ->union(DB::table('other')
                ->where('o_file', '=', $tree2->id())
                ->whereNotIn('o_type', ['HEAD', 'TRLR'])
                ->select(['o_id AS xref']));

        return DB::table(DB::raw('(' . $subquery1->toSql() . ') AS sub1'))
            ->mergeBindings($subquery1)
            ->joinSub($subquery2, 'sub2', 'other_xref', '=', 'xref')
            ->count();
    }
private function countCommonXrefs(Tree $tree1, Tree $tree2): int
    {
        $subquery1 = DB::table('individuals')
            ->where('i_file', '=', $tree1->id())
            ->select(['i_id AS xref'])
            ->union(DB::table('families')
                ->where('f_file', '=', $tree1->id())
                ->select(['f_id AS xref']))
            ->union(DB::table('sources')
                ->where('s_file', '=', $tree1->id())
                ->select(['s_id AS xref']))
            ->union(DB::table('media')
                ->where('m_file', '=', $tree1->id())
                ->select(['m_id AS xref']))
            ->union(DB::table('other')
                ->where('o_file', '=', $tree1->id())
                ->whereNotIn('o_type', ['HEAD', 'TRLR'])
                ->select(['o_id AS xref']));

        $subquery2 = DB::table('change')
            ->where('gedcom_id', '=', $tree2->id())
            ->select(['xref AS other_xref'])
            ->union(DB::table('individuals')
                ->where('i_file', '=', $tree2->id())
                ->select(['i_id AS xref']))
            ->union(DB::table('families')
                ->where('f_file', '=', $tree2->id())
                ->select(['f_id AS xref']))
            ->union(DB::table('sources')
                ->where('s_file', '=', $tree2->id())
                ->select(['s_id AS xref']))
            ->union(DB::table('media')
                ->where('m_file', '=', $tree2->id())
                ->select(['m_id AS xref']))
            ->union(DB::table('other')
                ->where('o_file', '=', $tree2->id())
                ->whereNotIn('o_type', ['HEAD', 'TRLR'])
                ->select(['o_id AS xref']));

        return DB::table(DB::raw('(' . $subquery1->toSql() . ') AS sub1'))
            ->mergeBindings($subquery1)
            ->joinSub($subquery2, 'sub2', 'other_xref', '=', 'xref')
            ->count();
    }
private function countCommonXrefs ( Tree $ tree1 , Tree $ tree2 ) : int { $ subquery1 = DB :: table ( 'individuals' ) -> where ( 'i_file' , '=' , $ tree1 -> id ( ) ) -> select ( [ 'i_id AS xref' ] ) -> union ( DB :: table ( 'families' ) -> where ( 'f_file' , '=' , $ tree1 -> id ( ) ) -> select ( [ 'f_id AS xref' ] ) ) -> union ( DB :: table ( 'sources' ) -> where ( 's_file' , '=' , $ tree1 -> id ( ) ) -> select ( [ 's_id AS xref' ] ) ) -> union ( DB :: table ( 'media' ) -> where ( 'm_file' , '=' , $ tree1 -> id ( ) ) -> select ( [ 'm_id AS xref' ] ) ) -> union ( DB :: table ( 'other' ) -> where ( 'o_file' , '=' , $ tree1 -> id ( ) ) -> whereNotIn ( 'o_type' , [ 'HEAD' , 'TRLR' ] ) -> select ( [ 'o_id AS xref' ] ) ) ; $ subquery2 = DB :: table ( 'change' ) -> where ( 'gedcom_id' , '=' , $ tree2 -> id ( ) ) -> select ( [ 'xref AS other_xref' ] ) -> union ( DB :: table ( 'individuals' ) -> where ( 'i_file' , '=' , $ tree2 -> id ( ) ) -> select ( [ 'i_id AS xref' ] ) ) -> union ( DB :: table ( 'families' ) -> where ( 'f_file' , '=' , $ tree2 -> id ( ) ) -> select ( [ 'f_id AS xref' ] ) ) -> union ( DB :: table ( 'sources' ) -> where ( 's_file' , '=' , $ tree2 -> id ( ) ) -> select ( [ 's_id AS xref' ] ) ) -> union ( DB :: table ( 'media' ) -> where ( 'm_file' , '=' , $ tree2 -> id ( ) ) -> select ( [ 'm_id AS xref' ] ) ) -> union ( DB :: table ( 'other' ) -> where ( 'o_file' , '=' , $ tree2 -> id ( ) ) -> whereNotIn ( 'o_type' , [ 'HEAD' , 'TRLR' ] ) -> select ( [ 'o_id AS xref' ] ) ) ; return DB :: table ( DB :: raw ( '(' . $ subquery1 -> toSql ( ) . ') AS sub1' ) ) -> mergeBindings ( $ subquery1 ) -> joinSub ( $ subquery2 , 'sub2' , 'other_xref' , '=' , 'xref' ) -> count ( ) ; }
Count of XREFs used by two trees at the same time.

@param Tree $tree1
@param Tree $tree2

@return int
Count of XREFs used by two trees at the same time .