Laravel 8 Query Scope Example

Laravel 8 model , relationship, join, select query scope tutorial. In this tutorial, you will learn how to create and use laravel eloquent model query scopes. Also learn how to create and use dynamic query scope in laravel 8 app.

When you work with small and large laravel web application. At that time you need to get/fetch active records from the database tables using the laravel query scopes.

Laravel query scopes to save your time to write code again and again. You can easily reuse laravel query scopes.

Laravel 8 Model Query Scopes

Create Basic Scope in Model

Now, you will learn how to create and use scope in your laravel model. You could do like:

Go to app/Post.php and create a scope here:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
	public $table = "posts";

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'id', 'title', 'body', 'status'
    ];
    /**
     * Scope a query to only include popular users.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */

    public function scopeStatus($query)
    {
        return $query->whereDate('status', 1);
    }
}

Use Basic Query Scope on Controller:

You could use model query scope in your laravel web application controllers like:

Post::status()->get(['id','title']);

Laravel 8 Create Dynamic Scope in Model

Next, You will learn how to create and use dynamic query scope in laravel web application.

You can create dynamic query scopes in laravel model:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
	public $table = "posts";

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'id', 'title', 'body', 'status'
    ];
    /**
     * Scope a query to only include popular users.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeStatus($query, $type)
    {
        return $query->where('status', $type);
    }
}

Dynamic Scope Query On Controller

You could use dynamic model query scope in your laravel web application controllers like:

Post::status(1)->get(['id',title']);

Laravel 8 Apply Scope with Relationship

Here, you will learn how to use query scopes with laravel relationship.

Go to your App/Category.php and create a relationship between Categories and Posts Tables:

class Category extends \Eloquent
{
public function posts()
{
return $this->HasMany('Post');
}
}

Visit App/Models/Post.php and create a relationship between Posts and Categories Tables:

class Post extends \Eloquent
 {
    public function category()
    {
        return $this->belongsTo('Category');
    }
 public function scopePublished($query)
    {
        return $query->where('published', 1);
    }
 }

Query scope with relationship

$categories = Category::with(['posts' => function ($q) {
$q->published();
}])->get();

Recommended Laravel Posts

AuthorDevendra Dode

Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of Tutsmake.com. My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including PHP, Python, JavaScript, jQuery, Laravel, Livewire, CodeIgniter, Node.js, Express.js, Vue.js, Angular.js, React.js, MySQL, MongoDB, REST APIs, Windows, XAMPP, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL, and Bootstrap. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

Leave a Reply

Your email address will not be published. Required fields are marked *