Hi friends. I have 4 tables, I will list them below. I want to associate these tables with laravel's relationship system.
/discuss/channels/eloquent/4-tables-relationship
I read the topic here, I wanted to do something exactly like this, I did it and it works, but there is a very minor problem.
First of all, I am sharing my paintings.
->admin_users
->id
->username
->permission_category
->id
->name
->permissions
->id
->permission_category_id
->name
->admin_perms
->id
->admin_users_id (foreign key)
->permissions_id (foreign key)
I also share my models and resources:
PermissionsResource.php
return [
"id" => $this->category[0]->id,
"name" => $this->category[0]->name,
"permissions" => [
"id" => $this->id,
"name" => $this->name
],
];
AdminUsers.php (Model)
public function permissions() {
return $this->belongsToMany(Permissions::class, 'admin_perms');
}
Permissions.php (Model)
public function category() {
return $this->belongsToMany(PermissionCategory::class, 'permissions', 'id');
}
and finally i am sharing my controller:
UsersController.php
public function add() {
$data = array();
$user = AdminUsers::where('id', $this->uid())->first();
if($user->hasAdministrator()->first())
$data['permission_category'] = PermissionCategory::with('permissions')->get();
else
$data['permission_category'] = PermissionsResource::collection($user->permissions()->with('category')->get());
return $data;
die();
return view('admin.users.add', $data);
}
and I get an output like this:
"permission_category": [{
"id": 2,
"name": "user",
"permissions": {
"id": 2,
"name": "userCreate"
}
},
{
"id": 2,
"name": "user",
"permissions": {
"id": 3,
"name": "userUpdate"
}
}
]
I want to get output like below.
"permission_category": [{
"id": 2,
"name": "user",
"permissions": [
{
"id": 2,
"name": "userCreate"
},
{
"id": 3,
"name": "userUpdate"
},
]
}
]
Actually, I translated what I want into a sql query.
SELECT
admin_perms.admin_users_id as user_id,
permission_category.name as category_name,
permissions.id as permission_id,
permissions.name as permission_name
FROM
permissions
JOIN permission_category ON permissions.permission_category_id = permission_category.id
JOIN admin_perms ON permissions.id = admin_perms.permissions_id
JOIN admin_users ON admin_perms.admin_users_id = admin_users.id
WHERE admin_users.id = 6
and this query gave me the following output:
[
{
user_id: 6,
category_name: 'user',
permission_id: 2,
permission_name: 'userCreate'
},
{
user_id: 6,
category_name: 'user',
permission_id: 3,
permission_name: 'userUpdate'
}
]
This is exactly the query I want. But I want to do this with eloquent relationship. Can you help me?