Shojib Flamon
Shojib Flamon

Reputation: 1519

laravel eloquent query orWhere

In Normal PHP i have a sql query

$q = 'shojib'; or $q = '01913711...'; or $q = 'House 23...';

select * from member where LoginName like '%$q%' or mobile like '%$q%' or  ConnectionAdderss like '%$q%' order by LoginName LIMIT 10;

i want to write this query in laravel. Please help me.

i am using SoftDeletingTrait in laravel Member Model

Member::where('zone', 'like', '%'.$key.'%')
            ->orWhere('login_name', 'like', '%'.$key.'%')
            ->orWhere('mobile', 'like', '%'.$key.'%')
            ->orWhere('name', 'like', '%'.$key.'%')
            ->orderBy('login_name')
            ->take('100')
            ->get();

But it will return all data from database with deleted_at is not null;

it should return only those data whose deleted_at is null;

Upvotes: 1

Views: 572

Answers (2)

Shojib Flamon
Shojib Flamon

Reputation: 1519

After certain times i have found solution

It should be

$members = Member::where(function($query) use ($key)
        {
            $query->where('zone', 'like', '%'.$key.'%')
                    ->orWhere('login_name', 'like', '%'.$key.'%')
                    ->orWhere('contact_number', 'like', '%'.$key.'%')
                    ->orWhere('sms_comn', 'like', '%'.$key.'%')
                    ->orWhere('email', 'like', '%'.$key.'%')
                    ->orWhere('name', 'like', '%'.$key.'%');
        })
        ->take('100')
        ->orderBy('login_name', 'ASC')
        ->get();

Upvotes: 0

Zahan Safallwa
Zahan Safallwa

Reputation: 3904

You should write the query as below

Member::onlyTrashed()->where('zone', 'like', '%'.$key.'%')
        ->orWhere('login_name', 'like', '%'.$key.'%')
        ->orWhere('mobile', 'like', '%'.$key.'%')
        ->orWhere('name', 'like', '%'.$key.'%')
        ->orderBy('login_name')
        ->take('100')
        ->get();

Upvotes: 1

Related Questions