Моя пользовательская модель:
public function role() {
return $this->belongsTo(Role::class);
}
Моя ролевая модель:
public function count() {
return User::where('role_id', $this->id)->count();
}
Я хочу узнать, сколько пользователей имеют определенную роль в моем компоненте Index.vue. Когда я набираю Tinker:
$role = Role::find(1);
$role->count();
Output: 1 -> because I have one user with a role with ID 1
Мой компонент Vue:
<li v-for = "role in roles">Role name: {{ role.name }}</li>
<li>Role count: {{ role.count}}</li>
Но это не работает, как планировалось.
Мой RoleController, где я передал переменную «роли» компоненту Index.vue:
public function index()
{
return Inertia::render('Roles/Index', [
'roles' => Role::all(),
]);
}
Я хочу отобразить это так:
Имя роли: Администратор
Количество ролей: 1
Имя роли: Подписчик
Количество ролей: 5
когда я делаю {{role.count}}, он ничего не печатает






если count не является столбцом в таблице ролей, вам нужно будет передать эти данные в Vue, в отличие от лезвия, Vue не имеет доступа к методам модели/коллекции
Я всегда использую ресурсы для преобразования моих данных в мой внешний интерфейс javascript. смотрите документацию https://laravel.com/docs/9.x/eloquent-resources
РольРесурс
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->role()
// ....
];
сейчас
public function index()
{
return Inertia::render('Roles/Index', [
'roles' => RoleResource::collection(Role::all()); //remember to import RoleResource
]);
}
Проверьте, помогает ли это
Я нашел решение для этого: Вам нужно вернуть коллекцию внутри вашего контроллера:
return Inertia::render('Roles/Index', [
'roles' => RoleResource::collection(Role::all()),
]);
Затем создайте RoleResource.php с помощью команды:
php artisan make:resource RoleResource
И, наконец, внутри вашего RoleResource верните это:
return [
'id' => $this->id,
'name' => $this->name,
'count' => User::where('role_id', $this->id)->count(),
];
Внутри вашего файла Index.vue добавьте «роли» в качестве реквизита как объект, например:
props: {roles: Object}
И foreach ваши роли:
<tr v-for = "role in roles.data">
{{role.id}} // This will print your role id
{{role.name}} // This will print your role name
{{role.count}} // This will print how much users have that role
</tr>
Конечный результат:
какую ошибку вы получаете? в чем собственно проблема?