0

实际上我正在做一些维护项目,以前的开发人员使用核心 sql 查询,但我想转换为 larvel 查询。这是 Sql 查询:-

$directories = DB::select('
        SELECT d.id, d.name, d.url_match, d.login_url, d.register_url, d.notes, d.logo, d.require_verification FROM `directories` d 
        WHERE d.id
        NOT IN (
            SELECT c.directory_id FROM citations c
            INNER JOIN directories d
            WHERE c.directory_id = d.id
            AND d.allow_citation = 1
            AND c.site_id = ' . $siteID .'
        )
        AND d.allow_citation = 1
        AND d.deleted_at IS NULL
        AND d.tier = '. $tier .'
        ORDER BY d.tier ASC         
    ');

我尝试在下面的 laravel 中进行转换:-

 $directories = Directories::select('id','name','url_match','login_url','register_url','notes',
                 'logo','require_verification')
                ->where(['allow_citation'=>1,'tier'=>$tier])
                ->whereNUll('deleted_at')->get();

有人能帮我吗。提前致谢

4

1 回答 1

1

最后我在谷歌搜索后完成了自己: -

$directories = Directories::select('id','name','url_match','login_url','register_url','notes','logo','require_verification')->whereNotIn('id', function($query) use($siteID){
        $query->select('citations.directory_id')
            ->from('citations')
            ->whereRaw('directories.id=citations.directory_id')
            ->where('directories.allow_citation', 1)
            ->where('citations.site_id', $siteID);
        })->where(['allow_citation'=>1,'tier'=>$tier])->whereNUll('deleted_at')->get();
于 2018-10-28T14:32:08.110 回答