codekerala/spa-laravel-vuejs

explanation about filterPaginateOrder trait

Opened this issue · 4 comments

hi, i love your project and it works very well and match what i need for an spa project with laravel. But i don't quite get it how everything works... and now i having a hard time to using it with json data that returned like this

{
  "model": {
    "current_page": 1,
    "data": [
      {
        "id": 8,
        "id_cu": 0,
        "id_pus": 1,
        "name": "test1",
        "username": "test17",
        "gambar": "",
        "status": 1,
        "created_at": "2018-02-27 06:37:10",
        "c_u": null,
        "pus": {
          "id": 1,
          "name": "Puskopdit BKCU Kalimantan"
        },
        "roles": [
          {
            "name": "CU Akses Penuh",
            "pivot": {
              "model_id": 8,
              "role_id": 2
            }
          }
        ]
      },
      {
        "id": 7,
        "id_cu": 0,
        "id_pus": 1,
        "name": "test1",
        "username": "test16",
        "gambar": "",
        "status": 1,
        "created_at": "2018-02-27 06:36:06",
        "c_u": null,
        "pus": {
          "id": 1,
          "name": "Puskopdit BKCU Kalimantan"
        },
        "roles": [
          
        ]
      }
    ],
    "from": 1,
    "last_page": 4,
    "next_page_url": "https://bkcuvue.dev/api/v1/user?page=2",
    "path": "https://bkcuvue.dev/api/v1/user",
    "per_page": "2",
    "prev_page_url": null,
    "to": 2,
    "total": 8
  }
}

so according to the json data returned above i want to user roles for search_column, i tried to use roles.name but it is not working so any idea to use those?

my controller is like this

public function index()
	{
    	$table_data = User::with(array('CU','pus','roles' => function($query){
				$query->select('name');
			}))->select('id','id_cu','id_pus','name','username','gambar','status','created_at')->filterPaginateOrder();

    	return response()
			->json([
				'model' => $table_data
			]);
	}

I think u have to use WhereHas method

whereHas? care to explain more? i'm still not really understand about whole eloquent and collection thing works in laravel...

and for more information roles table is from spatie permission package and i just happen to find out i can get those related roles to the user model by using with like that

In order to filter the results by relationship you have to use whereHas method.

For example:

User::with(['a', 'b', 'etc'])
  ->whereHas('roles', function($query) {
    $query->where('name', '=', 'admin'); // any search function
})->get();

The above code is not tested.

hmm but i'm in situation where i don't know which roles name will be, in fact i trying to get those roles name. so i am calling user model and roles that have relation with those user model.... i trying to make a list of table with user model (name, username, etc) with roles that those user model have.