Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Eloquent ORM - Complex where queries

I have the following query:

DB::select("SELECT * FROM mod_dns_records WHERE (scheduled = 'N' AND scheduleTime = 0 AND domainId = {$id}) OR (deleteRow = 'Y' AND domainId = {$id})");

However, this is not safe against SQL injection. Could someone help me to make this safe, or tell me how to rebuild this with the ORM.

Thanks!

like image 572
Ronald Jonkers Avatar asked Dec 14 '22 16:12

Ronald Jonkers


1 Answers

This would be the query as you had it

$result = DB::table('mod_dns_records')
            ->where('scheduled', 'N')
            ->where('scheduleTime', 0)
            ->where('domainId', $id)
            ->orWhere('deleteRow', 'Y')
            ->where('domainId', $id)
            ->get();

However I noticed it can be optimized a bit since the domainId condition exists in both groups:

$result = DB::table('mod_dns_records')
            ->where('domainId', $id)
            ->where(function($q){
                $q->where('scheduled', 'N');
                $q->where('scheduleTime', 0);
                $q->orWhere('deleteRow', 'Y');
            })
            ->get();
like image 142
lukasgeiter Avatar answered Dec 28 '22 00:12

lukasgeiter