Laravel / Vue / AWS を用いてポートフォリオを作成しています。「単語一覧を表示する機能」を実装したいのですが、ローカルではうまく機能してたのですが、EC2上にデプロイしたところ表示がされなくなってしまいました。コンソールとMySQLを確認したところ、単語の追加と保存はできているので、表示だけうまくいかない状況です。
#環境
amazon linux 2
PHP 7.3.26
Laravel Framework 6.20.16
vue@2.6.12
#該当のコード
php
1class WordController extends Controller 2{ 3 public function index() { 4 5 $user_id = Auth::id(); 6 $words = Word::all()->where('user_id', $user_id); 7 return response()->json($words); 8 9 } 10
vue
1data () { 2 return { 3 //取得したデータを配列に格納 4 words: [], 5 //以下略
vue
1// axiosを用いてデータを取得 2requestMyWord: function() { 3 axios.get('/api/word').then((res)=>{ 4 this.words = res.data; 5 console.log(res.data); 6 }); 7 },
現状上記のようにしていて、
Invalid prop: type check failed for prop "items". Expected Array, got Object
this.items.slice is not a function
という2つのエラーが出ています。
調べてみたところ原因としてはどちらも、「オブジェクトではなく配列で返せ」ということだと思うのですが、同じコードを書いているのにローカルで起動した際には配列、EC2にデプロイするとオブジェクトに変換されてしまいます。
#試してみたこと
とりあえず「オブジェクトを配列に返す」ことで改善されると思い、以下を試しました。
##① response()->json で返す
php
1public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return response()->json($words); 6 7 }
参考 https://qiita.com/qiita-kurara/items/089db7349e33b9402b42
##② [] を使う
php
1public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return [$word]; 6 7 }
参考 https://qiita.com/qiita-kurara/items/089db7349e33b9402b42
##③ array
php
1public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return array($word); 6 7 }
##④ toArray()
php
1public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return $words->toArray(); 6 7 }
参考 https://readouble.com/laravel/5.8/ja/collections.html#method-toarray
##⑤ json_decode
php
1 public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return $array = json_decode(json_encode($words), true);; 6 7 }
⑥ get_object_vars 関数
php
1 public function index() { 2 3 $user_id = Auth::id(); 4 $words = Word::all()->where('user_id', $user_id); 5 return get_object_vars($words);; 6 7 }
上記6点試してみましたが、相変わらずエラーが出る状態、または 「配列はできエラーは消えるが、配列の中にオブジェクトが生成される(?)状態になり、表示はされません。
自分が見落としてる点もあると思いますが、お力添えいただけると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー