Tuesday, May 15, 2018

Eloquent query AND OR - development

Eloquent query AND OR

I have a scenario in which I’m searching through a database using Eloquent in Laravel.

I have the following query:

$search = $request->get('q');

$users = User::where('username', 'like', '%' . $request->get('q') . '%')
            ->orWhere('displayName', 'like', '%' . $request->get('q') . '%')
            ->orWhere('email', 'like', '%' . $request->get('q') . '%')
            ->orWhere('role', 'like', '%' . $request->get('q') . '%')
            ->orWhere('department', 'like', '%' . $request->get('q') . '%')
            ->orWhere('location', 'like', '%' . $request->get('q') . '%')
            ->orWhere('directDialIn', 'like', '%' . $request->get('q') . '%')
            ->orWhere('mobileNumber', 'like', '%' . $request->get('q') . '%')->get();

and I have the following query scope:

/**
 * Scope a query by published
 */
public function scopePublished($query)
{
    return $query->where('published', 'open');
}

I want to use the query scope to only search open articles.

I know you can chain where like this: Article::where()->where()->where()->get()

I get a bit confused with the chaining but I want to say: search the article columns with a LIKE operator but only where an article is open.

Without sounding dense, is there an easy mindset to convert my RAW SQL thought into Eloquent queries?

In my head, it would be a base query looking for open articles and then a nested query that searches through each field.



from Laravel Questions and Answers https://laravelquestions.com/php/eloquent-query-and-or/
via Lzo Media

No comments:

Post a Comment