#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