【问题标题】:need to get related ids from pivot table需要从数据透视表中获取相关ID
【发布时间】:2021-01-23 15:31:17
【问题描述】:

我使用 Laravel 制作了多对多关系表,并且我使用前端作为 vuejs。我想将我所有相关的工作类别 ID 获取到特定的人。我的模型看起来像这样。

在我的 Person 模式关系中看起来像这样。

public function interests()
{
  return $this->belongsToMany(SubCategory::class, 'basic_detail_sub_category', 'basic_detail_id', 'sub_category_id')->withTimestamps();
}

我的工作类别模式看起来像这样

public function basics()
{
   return $this->belongsToMany(BasicDetails::class, 'basic_detail_sub_category', 'sub_category_id', 'basic_detail_id')->withTimestamps();
}

我想通过我的人员模式获取所有相关的工作 ID。

public function getBasicDetails()
{
    return BasicDetails::with(['interests' => function($query) {
        $query->select('sub_category_id')->get();
    }])->latest()->get();
}

这些都是我的后端人员。我使用 v-autocomplete 组件来查看我所有的工作类别。

<v-autocomplete
    v-model="basicDetails.interests"
    :disabled="isUpdating"
    :items="interestSub"
    outlined
    item-text="sub_category"
    item-value="id"
    multiple
>
    <template v-slot:selection="data">
     <v-chip
     v-bind="data.attrs"
     :input-value="data.selected"
     close
     @click="data.select"
     @click:close="remove(data.item)"
    >
    {{ data.item.sub_category }}
    </v-chip>
     </template>
     <template v-slot:item="data">
         <template v-if="typeof data.item !== 'object'">
          <v-list-item-content
            v-text="data.item"
          ></v-list-item-content>
         </template>
       <template v-else>
         <v-list-item-content>
            <v-list-item-title
               v-html="data.item.sub_category"
            ></v-list-item-title>
            </v-list-item-content>
       </template>
      </template>
    </v-autocomplete>

我需要从工作类别表中获取所有相关 ID 作为数组,而不是像表中的所有行。我怎样才能做到这一点?只是我想获取所有相关的工作类别并将其显示在我的自动完成中。我使用 vuex getter 来获取我的详细信息。

interestSub(state) {
  return state.interestSub;
 },

兴趣数组数据显示如下。

interests: [
   {
     pivot: Object,
     sub_category_id: 2
   },
   {
     pivot: Object,
     sub_category_id: 1
   },
]

但我想得到这样的兴趣数组。

 interests: [1, 2];

【问题讨论】:

    标签: laravel vue.js vuex


    【解决方案1】:

    如 Laravel 文档中所述:

    检索中间表列

    例如,假设我们的 User 对象有很多与之相关的 Role 对象。访问此关系后,我们可以使用模型上的 pivot 属性访问中间表:

    $user = App\Models\User::find(1);
    
    foreach ($user->roles as $role) {
        echo $role->pivot->created_at;
    }
    

    您可以获取关系,根据需要对其进行过滤,然后获取数据透视字段。

    【讨论】:

    • 我只想使用我在 belongsToMany 中提到的关系模式获取相关的 id。
    • return BasicDetails::with(['interests' => function($query) { $query->select('sub_category_id')->get(); }])->latest() ->get();
    • 这样用函数
    • @K.Mihiranga 您需要澄清这个问题。您想要一个人的所有子类别 ID,然后在自动完成中显示它们吗?
    • 我想获取与该人相关的子类别 ID,并且只获取数据透视表中同步函数的数组。
    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多