# MyProjectController

app / Http / Controllers / MyProjectController.php

# index

public function index(){
        return view('Project.project.user');
    }
1
2
3

# show

public function show($id){
    $project = Project::with('projectLeaderInfo', 'projectMemberInfo', 'taskInfo')
                        ->where('id', $id)
                        ->where(function ($query){
                            $query->whereHas('projectLeaderInfo', function ($q){
                                    // whereHas many to manay
                                $q->where('user_id', auth()->id());
                                })
                                ->orWhereHas('projectMemberInfo', function ($q){
                                    $q->where('user_id', auth()->id());
                                });
                        })
                        ->firstOrfail();
    return view('Project.project.myProjectDetail', ['project'=>$project]);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# projectTable

public function projectTable(){
    $projects = Project::with('projectLeaderInfo','projectMemberInfo')
                        ->whereHas('projectLeaderInfo', function ($query){
                            // whereHas many to manay
                            $query->where('user_id', auth()->id());
                        })
                        ->orWhereHas('projectMemberInfo', function ($query){
                            $query->where('user_id', auth()->id());
                        });
    return Datatables::of($projects)
        ->editColumn('description', function ($each){
            return Str::limit($each->description, 50);
        })
        ->addColumn('leaders', function ($each){
            $output = '<div>';
            foreach ( $each->projectLeaderInfo as $leader){
                $output .= '<img src="'.$leader->profileImagePath().'" class="profile-image-table-p">';
            }
            return $output .'</div>';
        })
        ->addColumn('members', function ($each){
            $output = '<div>';
            foreach ( $each->projectMemberInfo as $member){
                $output .= '<img src="'.$member->profileImagePath().'" class="profile-image-table-p">';
            }
            return $output .'</div>';
        })
        ->editColumn('priority', function ($each){
            if ($each->priority == 'high'){
                return '<span class="badge bg-success py-2 px-4 rounded-pill">High</span>';
            }elseif ($each->priority == 'middle'){
                return '<span class="badge bg-warning py-2 px-3 rounded-pill">Middle</span>';
            }else{
                return '<span class="badge bg-danger py-2 px-4 rounded-pill">Low</span>';
            }
        })
        ->editColumn('status', function ($each){
            if ( $each->status == 'complete' ){
                return '<span class="badge bg-success py-2 px-2 rounded-pill">Complete</span>';
            }elseif ($each->status == 'in_progress'){
                return '<span class="badge bg-primary py-2 px-2 rounded-pill">In Progress</span>';
            } else{
                return '<span class="badge bg-info py-2 px-3 rounded-pill">Pending</span>';
            }
        })
        ->addColumn('action', function ($each){
            $detail = '<a href="'. route('myproject.show', $each->id) .'" class="btn btn-outline-primary me-2"><i class="fa-solid fa-circle-info"></i></a>';
            return '<div class="d-flex">'. $detail .'</div>';
        })
        ->addColumn('plus_icon', function ($each){
            return null;
        })
        ->rawColumns(['leaders', 'members', 'priority', 'status', 'action']) // for HTML return
        ->make(true);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

# Code Overview

<?php

namespace App\Http\Controllers;

use App\Models\Project;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Yajra\DataTables\DataTables;

class MyProjectController extends Controller
{
    public function index(){
        return view('Project.project.user');
    }

    public function show($id){
        $project = Project::with('projectLeaderInfo', 'projectMemberInfo', 'taskInfo')
                            ->where('id', $id)
                            ->where(function ($query){
                                $query->whereHas('projectLeaderInfo', function ($q){
                                        // whereHas many to manay
                                    $q->where('user_id', auth()->id());
                                    })
                                    ->orWhereHas('projectMemberInfo', function ($q){
                                        $q->where('user_id', auth()->id());
                                    });
                            })
                            ->firstOrfail();
        return view('Project.project.myProjectDetail', ['project'=>$project]);
    }

    public function projectTable(){
        $projects = Project::with('projectLeaderInfo','projectMemberInfo')
                            ->whereHas('projectLeaderInfo', function ($query){
                                // whereHas many to manay
                                $query->where('user_id', auth()->id());
                            })
                            ->orWhereHas('projectMemberInfo', function ($query){
                                $query->where('user_id', auth()->id());
                            });
        return Datatables::of($projects)
            ->editColumn('description', function ($each){
                return Str::limit($each->description, 50);
            })
            ->addColumn('leaders', function ($each){
                $output = '<div>';
                foreach ( $each->projectLeaderInfo as $leader){
                    $output .= '<img src="'.$leader->profileImagePath().'" class="profile-image-table-p">';
                }
                return $output .'</div>';
            })
            ->addColumn('members', function ($each){
                $output = '<div>';
                foreach ( $each->projectMemberInfo as $member){
                    $output .= '<img src="'.$member->profileImagePath().'" class="profile-image-table-p">';
                }
                return $output .'</div>';
            })
            ->editColumn('priority', function ($each){
                if ($each->priority == 'high'){
                    return '<span class="badge bg-success py-2 px-4 rounded-pill">High</span>';
                }elseif ($each->priority == 'middle'){
                    return '<span class="badge bg-warning py-2 px-3 rounded-pill">Middle</span>';
                }else{
                    return '<span class="badge bg-danger py-2 px-4 rounded-pill">Low</span>';
                }
            })
            ->editColumn('status', function ($each){
                if ( $each->status == 'complete' ){
                    return '<span class="badge bg-success py-2 px-2 rounded-pill">Complete</span>';
                }elseif ($each->status == 'in_progress'){
                    return '<span class="badge bg-primary py-2 px-2 rounded-pill">In Progress</span>';
                } else{
                    return '<span class="badge bg-info py-2 px-3 rounded-pill">Pending</span>';
                }
            })
            ->addColumn('action', function ($each){
                $detail = '<a href="'. route('myproject.show', $each->id) .'" class="btn btn-outline-primary me-2"><i class="fa-solid fa-circle-info"></i></a>';
                return '<div class="d-flex">'. $detail .'</div>';
            })
            ->addColumn('plus_icon', function ($each){
                return null;
            })
            ->rawColumns(['leaders', 'members', 'priority', 'status', 'action']) // for HTML return
            ->make(true);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Last Updated: 6/1/2022, 8:08:37 AM