【问题标题】:How to get & display specific values from array of objects in MySQL DB?如何从 MySQL DB 中的对象数组中获取和显示特定值?
【发布时间】:2026-02-03 12:30:01
【问题描述】:

我有一个用户数组,其中包含每个用户的全名、ID、角色等对象。所说的用户有一个参数:user_machines,它的数组本身就填充了对象,我想获取并显示特定的值从这个数组的每个对象。更具体地说,它是这样的: 我显示所有用户,如果用户有 user_machines 数组,其中包含对象,我想显示例如该对象的 machine_name。

此时,我的查询如下所示:

class UserController extends Controller
{
    public function index()
    {
        $users = User::with('userMachines')->get();
        return response()->json(
            [
                'status' => 'success',
                'users' => $users->toArray()
            ],
            200
        );
    }

它得到了我需要的所有信息,但我不知道如何对其进行排序。 这是我的 getUsers 混合:

export const getUsers = {
  methods: {
    getUsers() {
      axios
        .get("users")
        .then(res => {
          this.users = res.data.users;
        })
        .catch(err => {
          console.log(err);
        });
    }
  }
};

这是我的初始化方法:

 methods: {
    initialize() {
      this.users = [
        {
          id: "",
          full_name: "",
          username: "",
          role: "",
          division: "",
          center: "",
          machines: "",
          user_machines: []
        }
      ];
    },

这是数据表:

            <v-data-table
              :headers="headers"
              :items="users"
              :key="users.id"
              :search="search || radio"
              hide-actions
              class="elevation-1"
            >
              <template v-slot:items="props">
                <td class="text-xs-left">
                  <v-avatar :size="30" color="grey lighten-4">
                    <img :src="avatar">
                  </v-avatar>
                </td>
                <td class="text-xs-left">{{ props.item.full_name }}</td>
                <td class="text-xs-left">{{ props.item.role }}</td>
                <td class="text-xs-left">{{ props.item.division }}</td>
                <td class="text-xs-left">{{ props.item.center }}</td>
                <td class="text-xs-left">{{ props.item.user_machines }}</td>
                <td class="justify-right layout ml-3">
                  <v-spacer></v-spacer>
                  <v-btn color="#009af9" flat @click="editItem(props.item)">ВИЖ</v-btn>
                </td>
              </template>
              <template v-slot:footer>
                <td :colspan="headers.length">
                  <v-btn color="#009af9" class="getMoreButton" large dark>GET MORE</v-btn>
                </td>
              </template>
              <template v-slot:no-data>
                <v-alert
                  :value="true"
                  color="error"
                  icon="warning"
                >Sorry, nothing to display here :(</v-alert>
                <v-btn color="#009af9" @click="initialize">Reset</v-btn>
              </template>
            </v-data-table>

这是它在 Telescope 中的 get 请求中的样子:

users: [
{
id: 1,
full_name: "SomeDude",
username: "SomeDude",
role: "admin",
division: "asdf",
center: "asdf",
created_at: "2019-05-25 10:24:17",
updated_at: "2019-05-25 10:24:17",
user_machines: [
{
id: 1,
machine_number: 2143,
machine_name: "FirstMachine",
machine_division: "FirstMachine"",
machine_center: "FirstMachine"",
machine_speed: "FirstMachine"",
created_at: "2019-05-25 10:24:17",
updated_at: "2019-05-25 10:24:17",
pivot: {
user_id: 1,
machine_id: 1
}
},
{
id: 2,
machine_number: 2241,
machine_name: "SecondMachine",
machine_division: "SecondMachine",
machine_center: "SecondMachine",
machine_speed: "SecondMachine",
created_at: "2019-05-25 10:24:17",
updated_at: "2019-05-25 10:24:17",
pivot: {
user_id: 1,
machine_id: 2
}
},
{
id: 3,
machine_number: 2341,
machine_name: "ThirdMachine",
machine_division: "ThirdMachine",
machine_center: "ThirdMachine",
machine_speed: "ThirdMachine",
created_at: "2019-05-25 10:24:17",
updated_at: "2019-05-25 10:24:17",
pivot: {
user_id: 1,
machine_id: 3
}
}

我非常感谢经验丰富的开发人员提供的有关该主题的阅读帮助和指导。 我正在使用 Laravel、Vue、MySQL。 提前致谢!

【问题讨论】:

  • 你能显示你已经拥有的用于显示信息的代码吗?
  • @RossWilson 您好,先生,我已经用我的 getUsers() 和 initalize() 方法更新了我的帖子。
  • 你的组件也有 HTML 吗?
  • 是的,我有一个 Vuetify 表,我可以在其中显示数据,但此时我正在显示整个 user_machines 数组,我不知道如何只显示 user_machines->machine_name。
  • 如果您可以显示组件的 HTML 和其余代码,那将是一个很大的帮助。

标签: mysql laravel vue.js


【解决方案1】:

如果您只想显示machine_name,那么您需要使用v-for 循环遍历它们:

替换

<td class="text-xs-left">{{ props.item.user_machines[0].machine_name }}</td>

<td class="text-xs-left">
    <ul>
        <li v-for="user_machine in props.item.user_machines" v-text="user_machine.machine_name"></li>
    </ul>
</td>

如果您愿意,显然您可以使用不同的标记来代替无序列表 (&lt;/ul&gt;)。


或者,如果您只想显示第一个,那么您可以执行以下操作:

<td class="text-xs-left">{{ props.item.user_machines[0].machine_name }}</td>

【讨论】:

  • 再次感谢您花时间帮助我解决问题。我确定你的解决方案是正确的,但我明天要试试,现在已经很晚了:) 再次感谢,你摇滚!