gsk
gsk

Reputation: 2379

How use orWhere in laravel elequent properly?

I want do following query in laravel elequent

select from table where cond1 and(cond or cond or cond..)and cond3.

I have used following code,

$invoice = Invoice::with("items", "salesPerson", "client");
if ($q = Request::input("q")) {
        $invoice->where("invoices.invoice_number", 'LIKE', "%$q%");
        $invoice->orWhere("invoices.reference_number", 'LIKE', "%$q%");
        $invoice->orWhere("invoices.client_name", 'LIKE', "%$q%");
        $invoice->orWhere("invoices.invoice_date", 'LIKE', "$q%");
        $invoice->orWhere("invoices.due_date", 'LIKE', "$q%");
    }
$invoice->whereNull("invoices.deleted_at");

but it return deleted records as well.How can I fix this?

Upvotes: 0

Views: 85

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152860

In this case a nested where comes in handy:

$invoice = Invoice::with("items", "salesPerson", "client");
if ($q = Request::input("q")) {
    $invoice->where(function($query) use ($q){
        $query->where("invoices.invoice_number", 'LIKE', "%$q%");
        $query->orWhere("invoices.reference_number", 'LIKE', "%$q%");
        $query->orWhere("invoices.client_name", 'LIKE', "%$q%");
        $query->orWhere("invoices.invoice_date", 'LIKE', "$q%");
        $query->orWhere("invoices.due_date", 'LIKE', "$q%");
    });
}
$invoice->whereNull("invoices.deleted_at");

Upvotes: 1

Related Questions