首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过laravel 8惯性中的模型访问关系

如何通过laravel 8惯性中的模型访问关系
EN

Stack Overflow用户
提问于 2021-03-05 04:44:48
回答 2查看 1.2K关注 0票数 4

我在users表和areas表之间有一个一对多的关系,当我返回配置文件数据时,我从users表中获取area_id,我需要使用models获取区域名称。有没有办法在纵断面图中获取面积名称?我尝试在show.vue中调用模型函数,但它不起作用。

User.php

代码语言:javascript
复制
 public function area()
    {
        return $this->belongsTo(Area::class);
    }

Area.php

代码语言:javascript
复制
 public function users()
    {
        return $this->hasMany(User::class);
    }

show.vue

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-14 15:31:49

您需要加载要手动显示的所有关系。与Blade不同,您不能仅仅访问与$user->area的关系,因为$user不是一个雄辩的实例,而是您将其作为JSON返回给您的Vue实例的内容。

从您的控制器调用$user->load('area')。这将使area对您可用。

票数 4
EN

Stack Overflow用户

发布于 2021-08-23 16:20:41

我也遇到过同样的问题,但最终我发现了另一个技巧,我在模型中定义了另一个方法并添加了一个属性

在您的示例中:尝试以下命令: Area.php

代码语言:javascript
复制
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();
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66482756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档