Get Specific Columns Data Tutorial in Laravel 11

 <?php


namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        // $post = Post::with("user")->get();
        // if we want to fetch only specific columns data with "with()" method at that time
        // we have to specify "foreign key" column name as shown below :
        // $post = Post::with("user")->get(["title","description","user_id"]);

        // if we want to fetch only specific columns data with "with()" method at that time
        // we have to specify "primary key" column name as shown below :
        // $post = Post::with("user:name,email,id")->get(["title","description","user_id"]);;

        // we can use alias name of column name as shown below :
        // $post = Post::with("user:name as User Name,email as User Email,id")->get(["title","description","user_id"]);
        // $post = Post::with(["user" => function($query){
        //     $query->select("id","name","email");
        // }])->get();

        // $post = Post::with(["user" => function ($query) {
        //     $query->select("id", "name", "email");
        // }])->get(["title", "description", "user_id"]);

        // $post = Post::select("user_id", "title", "description")->with(["user" => function ($query) {
        //     $query->select("id", "name", "email");
        // }])->get();

        // $post = Post::select(["title","description","user_id"])->withWhereHas("user",function($query){
        //     $query->select("id","name","email")->where("city","Delhi");
        // })->get();

        // Till now we have fetched data from two tables only but if we want to fetch data from three
        // tables (first table "users", second table "posts", third table "comments")then we can do as shown below :
        // $post = Post::select(["title", "description", "user_id"])->with([
        //     "user" => function ($query) {
        //         $query->select("id", "name", "email");
        //     },
        //     "comments" => function ($query) {
        //         $query->select("post_id", "detail");
        //     }
        // ])->get();


        // Here below we have specified column names(of "users" table) in "Post" Model file
        // we can check "Post" Model file
        // $post = Post::with("user")->get();

        // if we want to fetch all "users" table data along with "posts" table data everytime then we
        // can specify in "Post" model file as shown in "Post" model file
        // $post = Post::get();

        // $post = Post::find(2);

        // if we want to fetch only "posts" table data without "users" table data as shown below :
        // $post = Post::without("user")->find(2);
        // $post = Post::without("user")->get();
        $post = Post::withOnly("user")->get();

        return $post;
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}
Above File is app\Http\Controllers\PostController File





Below File is app\Http\Controllers\UserController File
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        // $user = User::get();
        // $user = User::select("name","city")->get();
        // $user = User::select("name","city")->where("city","Delhi")->get();
        // $user = User::where("city","Delhi")->get(["name","email","city"]);

        // $user = User::all("name","email")->toArray();
        // $user = User::pluck("email");
        // $user = User::pluck("email","name");
        // $user = User::pluck("name","city");     //pluck() method will remove duplicates city names
        // pluck() method will show only last value from duplicate records
        // $user = User::where("city","Delhi")->pluck("name","city");

        // $user = User::find(1);
        // $user = User::find(1,["name","email"]);
        // $user = User::findorfail(2,["name","email"]);
        // $user = User::find(2)->email;
        // $user = User::where("city","Delhi")->first()->email;
        // $user = User::where("city","Delhi")->value("email");
        // $user = User::where("city","Goa")->value("email");

        // Here below we have specified column names(of "posts" table) in "User" Model file
        // we can check "User" Model file

        // $user = User::with("post")->get();

        // Fetch "users" table data with "posts" table data in already existing query as shown below :
        $user = User::all();
        $user->load("post");

        return $user;
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}





Below File is app\Models\Post File
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = true;
    protected $table = "posts";
    protected $fillable = ["title", "description", "status", "user_id"];   //First way, we can use anyone
    // protected $guarded = [];     //Second way, we can use anyone

    protected $with = ["user"];

    public function user()
    {
        return $this->belongsTo(User::class)->select(["name", "email", "id"]);
    }
}





Below File is app\Models\User File
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public $timestamps = false;
    protected $table = "users";
    protected $fillable = ["name", "email", "city", "status"];

    public function post()
    {
        return $this->hasMany(Post::class)->select(["title", "description", "user_id"]);
    }
}





Below File is database\json\posts File
[
    {
        "title": "News Title One",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 1
    },
    {
        "title": "News Title Two",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 2
    },
    {
        "title": "News Title Three",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 1
    },
    {
        "title": "News Title Four",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 3
    },
    {
        "title": "News Title Five",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 3
    },
    {
        "title": "News Title Six",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 1
    },
    {
        "title": "News Title Seven",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 3
    },
    {
        "title": "News Title Eight",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 2
    },
    {
        "title": "News Title Nine",
        "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "user_id": 4
    }
]





Below File is database\json\users File
[
    {
        "name": "Yahoo Baba",
        "email": "yahoobaba@gmail.com",
        "city": "Delhi",
        "status": 1
    },
    {
        "name": "Salman Khan",
        "email": "salman@gmail.com",
        "city": "Mumbai",
        "status": 0
    },
    {
        "name": "Deepika Padukone",
        "email": "deepika@gmail.com",
        "city": "Delhi",
        "status": 1
    },
    {
        "name": "Abhishek Bachchan",
        "email": "abhishek@gmail.com",
        "city": "Goa",
        "status": 1
    }
]





Below File is database\migrations\2024_12_18_115130_create_users_table File
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->string("email", 50)->unique();
            $table->string("city");
            $table->tinyInteger("status")->default(1);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('users');
    }
};





Below File is database\migrations\2024_12_18_115842_create_posts_table File
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string("title", 50);
            $table->longText("description");
            $table->tinyInteger("status")->default(1);
            $table->unsignedBigInteger("user_id");
            $table->foreign("user_id")->references("id")->on("users")->onUpdate("cascade")->onDelete("cascade");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};





Below File is database\seeders\DatabaseSeeder File
<?php

namespace Database\Seeders;

use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // User::factory(10)->create();

        // User::factory()->create([
        //     'name' => 'Test User',
        //     'email' => 'test@example.com',
        // ]);

        $this->call([
            UserSeeder::class,
            PostSeeder::class
        ]);
    }
}





Below File is database\seeders\PostSeeder File
<?php

namespace Database\Seeders;

use App\Models\Post;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;

class PostSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $json = File::get(path: "database/json/posts.json");
        $posts = collect(json_decode($json));

        $posts->each(function ($post) {
            Post::create([
                "title" => $post->title,
                "description" => $post->description,
                "user_id" => $post->user_id
            ]);
        });
    }
}





Below File is database\seeders\UserSeeder File
<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\File;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $json = File::get(path: "database/json/users.json");
        $users = collect(json_decode($json));

        $users->each(function ($user) {
            User::create([
                "name" => $user->name,
                "email" => $user->email,
                "city" => $user->city,
                "status" => $user->status
            ]);
        });
    }
}





Below File is routes\web File
<?php

use App\Http\Controllers\PostController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::resource("user", UserController::class);

Route::resource("post", PostController::class);


Comments

Popular posts from this blog

Eloquent Many to Many Relationship Tutorial in Laravel 11

Eloquent with JSON Data Columns Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11