質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

985閲覧

LaravelからVueコンポーネントに渡した数値が勝手に丸められる

naoya0102

総合スコア7

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Blade

Bladeとは、 PHPフレームワークのLaravelで使用することができるテンプレートエンジンです。テンプレートの継承とエスケープ機能を提供します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

3クリップ

投稿2020/02/27 11:46

前提・実現したいこと

LaravelのブレードからVueのコンポーネントに大きい数値を渡すと値が勝手に丸められるので、それを解消したい。

【質問内容】
Laravel + Vue.jsでWebサービスを作っています。

Twitter APIを使って、Twitter IDを取得し、それをデータベースに保存して、色々処理を書いているのですが、LaravelのコントローラーでIDを取得、Bladeへデータを返却、Vueのコンポーネントへ値を渡すとIDの値が丸められてしまいます。

発生している問題・エラーメッセージ

エラーが出ているわけでは無いですが、16桁を超えると値が丸められるようです。

例: ID:770983194769760257 →ID:770983194769760300になる。 ID:1128913499994779648 →ID:1128913499994779600になる・

該当のソースコード

Laravel

1//コントローラー側の処理 2public function index(){ 3 4 // アカウント取得 5 $accounts = TwitterAccount::where('user_id',Auth::id())->get(); 6 7 return view('mypage',['accounts' => $accounts]); 8}

Laravel

1//Blade(該当箇所のみ) 2<!-- メイン部分--> 3@section('content') 4 <mypage-component 5 :accounts="{{ $accounts }}" 6 > 7 </mypage-component> 8@endsection

Vue

1//一部省略 2<template> 3 <div>{{accounts}}</div> 4</template> 5 6<script> 7 export default { 8 props:['accounts'], 9 data: function() { 10 return { 11 accountList: this.accounts, 12 } 13 } 14 } 15</script>

試したこと

Blade内で、{{ $accounts }}の値を確認すると、丸められていないことは確認済です。
Vueに渡って、値を表示するとなぜかIDが丸められてしまいます。

補足情報(FW/ツールのバージョンなど)

Laravel:5.8
Vue:2.5.17

データベースのTwitter IDカラムはBigIncrementsで作成しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

「Vue.jsで」だと最近ここで話が進んでるっぽい。
つまりまだ対応してない。
https://github.com/vuejs/vue/issues/11126
:accounts="{{ $accounts }}"で複数アカウントを渡してるなら↑これとは少し違う話かも。
IDだけ渡してみると同じ。

Vueのtemplateに直接書かずaxiosで取得なら対策はある。
http://buchio.ever.jp/axios-bigint/
Laravel+Vueならaxios使うほうが普通の作り方。

投稿2020/02/27 12:18

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoya0102

2020/02/27 14:07

早速の、回答ありがとうございました! 頂いた情報をもとに、対応方法を検討してみます。
guest

0

ベストアンサー

Vueが丸めているのではなく、JSがその数列をbigintではなくNumberと解釈するのが原因かと思われます。
例えばブラウザのコンソールで

console.log(770983194769760257) console.log(770983194769760257n)

とするだけでも自動的に丸められているのがわかるかと思います。
idは計算するものでもないので、文字列として渡してあげるのが良いかと思います。

下記は未検証だが文字列化に役立つかもしれない情報

  • modelにpublic $incrementing = false; // を追加idを文字列として扱います
  • json_encode を明示的を通してjson化する(NUMERICCHECKフラグがあると勝手に数値化するので)

をすると改善するかもしれません。

投稿2020/02/27 13:00

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoya0102

2020/02/27 14:08

早速の回答ありがとうございます。 おかげで、原因はわかったので、どう対応するか検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問