Axios ПОЛУЧАЕТ возврат [0, 0, 5] вместо UUID из базы данных, используя Laravel и Vue JS

#laravel #vue.js #axios #get #uuid

Вопрос:

Эта проблема казалась мне такой простой, когда я столкнулся с ней вчера! Но когда я не нашел подобного вопроса в Google, я понял, что это не так просто, как я думал!!!
Поэтому, если есть какой-либо аналогичный вопрос, который я не нашел со вчерашнего дня, пожалуйста, дайте мне знать.

Я пытаюсь передать данные из базы данных с помощью Laravel. Я использовал UUID в качестве первичного ключа для таблицы уведомлений вместо автоматического увеличения первичного ключа (это опция по умолчанию для таблицы уведомлений в Laravel!).
Я могу принести и прочитать все остальные столбцы такими, какие они есть, но столбец ID, который является тип UUID приходит как 0 или 0 или 5, или просто любой другой цифры, однако реальный идентификатор может быть 1367dc99-ee67-4f0f-b0eb-c2215831d7db .
Честно говоря, я понятия не имею, что не так либо с помощью метода, которые я использовал в фреймворк Laravel или в Vue и JS «Аксиос».

Существует ли какая-либо конкретная техника, которую я должен использовать для чтения UUID из серверной части во внешний интерфейс? Пожалуйста, помогите мне с этим.

Я прикрепил коды от Laravel и Vue JS Axios ниже. Если в моем вопросе чего-то не хватает, пожалуйста, дайте мне знать.

Код Laravel

 $notifications = Notifications::where('notifiable_id', auth()->user()->id)->orderBy('created_at', 'DESC')->get();

return response()->json(
[
   "notifications" => $notifications
]
 

Метод ПОЛУЧЕНИЯ Vue JS Axios

 data () {
   return {
      loading: false,
      unreadNotifications: []
   }
},
methods: {
  async Notifications () {
    this.loading = true
    await axios.get('/user/notifications/unreads')
        .then((response) => {
            this.unreadNotifications = response.data
        })
        .finally (() => {
            this.loading = false
        })
  }
}
 

на выходе получается [ 0, 5 ]

Комментарии:

1. Когда вы console.log(response.data.notifications) , каков будет результат ?

2. Вывод @Atika представляет собой массив типа наблюдателя со значением примерно таким (1) [{…}, {…}, __ob__: Observer] 0: avatar: "info.png" created_at: "2021-09-25T12:07:20.000000Z" data: "{"notifiable_type":"6d2bd7c3d7e461949f","notifiable_id":"daniel@email.com"}" id: 0 message: "You account is successfully activated!" notifiable_id: 1 notifiable_type: "App\Models\User" read_at: "2021-09-25 12:07:24" seen_at: "2021-09-25 12:07:24" type: "verification" updated_at: "2021-09-25T12:07:24.000000Z" user_id: 1 length: 1 __ob__: Observer {value: Array(1), dep: Dep, vmCount: 0}

Ответ №1:

Если вы хотите отобразить свой id следующим образом : 1367dc99-ee67-4f0f-b0eb-c2215831d7db , затем измените свой запрос, :

 $notifications = DB::table('notifications')
         ->where('notifiable_id', auth()->user()->id)
         ->orderByDesc('created_at')
         ->get();

return response()->json([
       "notifications" => $notifications
    ]);
 

Комментарии:

1. Большое вам спасибо за это решение, и оно работает. Не могли бы вы также объяснить, почему другой способ, которым я пользовался раньше, не сработал? Мне просто любопытно узнать его причину!

2. По соглашению, Eloquent предполагает, что первичный ключ в модели представляет собой увеличенное целочисленное значение. Поскольку мы используем UUID, нам нужно указать, что первичный ключ является строкой и что он не является добавочным значением. Для этого (если вы хотите использовать UUID в своей модели) я приглашаю вас прочитать эту статью: larashout.com/using-uuids-in-laravel-models