Murlidhar Fichadia
Murlidhar Fichadia

Reputation: 2609

reuse mysql query code among few methods in same controller - Laravel 5.4

I have few queries which I would like to use it to few methods in the same controller.for example below code:

$lastlogin = User::select('lastlogin')->where('id',Auth::user()->id)->get()->pluck('lastlogin');
$bio = User::where('id',Auth::user()->id)->value('bio');
$photo = User::where('id',Auth::user()->id)->value('photo');
$notifications = Notification::where('created_at','>',$lastlogin)->get();
$status = User::where('id',Auth::user()->id)->value('search_status');

I need to call above query in 4 methods in UserController.

I thought of doing something like:

public function john_doe()
{
$lastlogin = User::select('lastlogin')->where('id',Auth::user()->id)->get()->pluck('lastlogin');
$bio = User::where('id',Auth::user()->id)->value('bio');
$photo = User::where('id',Auth::user()->id)->value('photo');
$notifications = Notification::where('created_at','>',$lastlogin)->get();
$status = User::where('id',Auth::user()->id)->value('search_status');
}

Then

UserController

public abc (){john_doe();}
public def (){john_doe();}
public ghi (){john_doe();}
public jkl (){john_doe();}

But I get an error. How do I do this so when I change the code in one place it reflects everywhere?

Updated question

public function notify()
    {
    $bio = User::where('id',Auth::user()->id)->value('bio');
    $photo = User::where('id',Auth::user()->id)->value('photo');
    $friends = Friend::where('user_id',Auth::user()->id)->where('reqs_status',2)->get();
    $notifications = Notification::where('created_at','>',Auth::user()->lastlogin)->get();
    $status = User::where('id',Auth::user()->id)->value('search_status');

    }

    public function index()
    {

    $this->notify();  
    return view('/users/index',compact('send_requests','accept_rejects','sent_requests','users','bio','photo','friends','status','seeks','filters','notifications'));
    }

Upvotes: 1

Views: 92

Answers (2)

UfguFugullu
UfguFugullu

Reputation: 2147

Your UserController could looks like this

class UserController extends BaseController {

  public function notify()
  {
      $array['bio'] = User::where('id',Auth::user()->id)->value('bio');
      $array['photo'] = User::where('id',Auth::user()->id)->value('photo');
      $array['friends'] = Friend::where('user_id',Auth::user()->id)->where('reqs_status',2)->get();
      $array['notifications'] = Notification::where('created_at','>',Auth::user()->lastlogin)->get();
      $array['status'] = User::where('id',Auth::user()->id)->value('search_status');

      return $array;
  }

  public function index()
  {
    return view('/users/index', $this->notify());
  }

}

Upvotes: 1

Sandeesh
Sandeesh

Reputation: 11906

That is a poorly written code. You get everything except notifications from the logged in user model.

public function fetchData()
{
    $user = auth()->user();
    $notifications = Notification::where('created_at', '>' , $user->lastlogin)->get();

    $data = [
        'lastlogin' => $user->lastlogin,
        'bio' => $user->bio,
        'photo' => $user->photo,
        'search_status' => $user->search_status,
        'notifications' => $notifications,
    ];

    return (Object)$data;
}

public function test()
{
    $data = $this->fetchData();

    // $data->lastlogin;
    // $data->bio;
    // $data->photo;
    // $data->search_status;
    // $data->notifications;
}

Upvotes: 1

Related Questions