如何通过 laravel 8 惯性中的模型访问关系
how to access the relationships via models in laravel 8 inertia
我在用户 table 和区域 table 之间存在一对多关系,当我 return 个人资料数据时,我从用户 table 那里得到 area_id ,我需要使用模型获取区域名称。
有没有办法在配置文件视图中获取区域名称?
我试图在 show.vue 中调用模型函数,但它不起作用。
User.php
public function area()
{
return $this->belongsTo(Area::class);
}
Area.php
public function users()
{
return $this->hasMany(User::class);
}
show.vue
<template>
<app-layout>
<template #header>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
Profile
</h2>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
Area :
</h2>
</template>
<div>
<div class="max-w-7xl mx-auto py-10 sm:px-6 lg:px-8">
<div v-if="$page.props.jetstream.canUpdateProfileInformation">
<update-profile-information-form :user="$page.props.user" />
<jet-section-border />
</div>
<div v-if="$page.props.jetstream.canUpdatePassword">
<update-password-form class="mt-10 sm:mt-0" />
<jet-section-border />
</div>
<div v-if="$page.props.jetstream.canManageTwoFactorAuthentication">
<two-factor-authentication-form class="mt-10 sm:mt-0" />
<jet-section-border />
</div>
<logout-other-browser-sessions-form :sessions="sessions" class="mt-10 sm:mt-0" />
<template v-if="$page.props.jetstream.hasAccountDeletionFeatures">
<jet-section-border />
<delete-user-form class="mt-10 sm:mt-0" />
</template>
</div>
</div>
</app-layout>
</template>
<script>
import AppLayout from '@/Layouts/AppLayout'
import DeleteUserForm from './DeleteUserForm'
import JetSectionBorder from '@/Jetstream/SectionBorder'
import LogoutOtherBrowserSessionsForm from './LogoutOtherBrowserSessionsForm'
import TwoFactorAuthenticationForm from './TwoFactorAuthenticationForm'
import UpdatePasswordForm from './UpdatePasswordForm'
import UpdateProfileInformationForm from './UpdateProfileInformationForm'
export default {
props: ['sessions'],
components: {
AppLayout,
DeleteUserForm,
JetSectionBorder,
LogoutOtherBrowserSessionsForm,
TwoFactorAuthenticationForm,
UpdatePasswordForm,
UpdateProfileInformationForm,
},
}
</script>
您需要手动加载所有要显示的关系。与 Blade 不同,您不能只访问与 $user->area
的关系,因为 $user
不是 Eloquent 实例,而是您作为 JSON 返回给 Vue 实例的内容。
从您的控制器调用 $user->load('area')
。这将使 area
可供您使用。
我也遇到了同样的问题,但最后我找到了另一个窍门,
我在我的模型中定义了另一个方法并添加了一个属性
你的情况:
试试这个:
Area.php
class Area extends Model
{ ....
$appends = ['users'];
public function users()
{
return $this->hasMany(User::class);
}
// define a methode getUsersAttribute()
public function getUsersAttribute(){
return $this->users()->get();
}
我在用户 table 和区域 table 之间存在一对多关系,当我 return 个人资料数据时,我从用户 table 那里得到 area_id ,我需要使用模型获取区域名称。 有没有办法在配置文件视图中获取区域名称? 我试图在 show.vue 中调用模型函数,但它不起作用。
User.php
public function area()
{
return $this->belongsTo(Area::class);
}
Area.php
public function users()
{
return $this->hasMany(User::class);
}
show.vue
<template>
<app-layout>
<template #header>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
Profile
</h2>
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
Area :
</h2>
</template>
<div>
<div class="max-w-7xl mx-auto py-10 sm:px-6 lg:px-8">
<div v-if="$page.props.jetstream.canUpdateProfileInformation">
<update-profile-information-form :user="$page.props.user" />
<jet-section-border />
</div>
<div v-if="$page.props.jetstream.canUpdatePassword">
<update-password-form class="mt-10 sm:mt-0" />
<jet-section-border />
</div>
<div v-if="$page.props.jetstream.canManageTwoFactorAuthentication">
<two-factor-authentication-form class="mt-10 sm:mt-0" />
<jet-section-border />
</div>
<logout-other-browser-sessions-form :sessions="sessions" class="mt-10 sm:mt-0" />
<template v-if="$page.props.jetstream.hasAccountDeletionFeatures">
<jet-section-border />
<delete-user-form class="mt-10 sm:mt-0" />
</template>
</div>
</div>
</app-layout>
</template>
<script>
import AppLayout from '@/Layouts/AppLayout'
import DeleteUserForm from './DeleteUserForm'
import JetSectionBorder from '@/Jetstream/SectionBorder'
import LogoutOtherBrowserSessionsForm from './LogoutOtherBrowserSessionsForm'
import TwoFactorAuthenticationForm from './TwoFactorAuthenticationForm'
import UpdatePasswordForm from './UpdatePasswordForm'
import UpdateProfileInformationForm from './UpdateProfileInformationForm'
export default {
props: ['sessions'],
components: {
AppLayout,
DeleteUserForm,
JetSectionBorder,
LogoutOtherBrowserSessionsForm,
TwoFactorAuthenticationForm,
UpdatePasswordForm,
UpdateProfileInformationForm,
},
}
</script>
您需要手动加载所有要显示的关系。与 Blade 不同,您不能只访问与 $user->area
的关系,因为 $user
不是 Eloquent 实例,而是您作为 JSON 返回给 Vue 实例的内容。
从您的控制器调用 $user->load('area')
。这将使 area
可供您使用。
我也遇到了同样的问题,但最后我找到了另一个窍门, 我在我的模型中定义了另一个方法并添加了一个属性
你的情况: 试试这个: Area.php
class Area extends Model
{ ....
$appends = ['users'];
public function users()
{
return $this->hasMany(User::class);
}
// define a methode getUsersAttribute()
public function getUsersAttribute(){
return $this->users()->get();
}