@sakagucchi (ぐち)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

laravelでphpで取得したデータをjavascriptに渡したい。

初学者です。

laravelでメモアプリを作成しているのですが、phpで取得したデータをJavascriptにて処理したいと思い、index.blade.php内に以下のように記述してデータを渡そうとしました。

        <script>
            let periods = @json($memos->period);
            let createdAtDates = @json($memos->created_at);
        </script>

こちらがマイグレーションファイルの記述です。

    public function up()
    {
        Schema::create('memos', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->integer('period')->unsigned();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->timestamps();
        });
    }

このうちmemoごとのperiodとtimestampsのcreated_atを配列でjavascriptに渡そうとしたのですが、let periods = @json($memos->period)と記述すると

Property [period] does not exist on this collection instance.

と出てしまい渡せません。

let periods = @json($memos)で試すと、全てのデータをconsoleで表示できることは確認しました。

どのようにしたら解決できますでしょうか? プログラミングに関する質問はこれが初めてで、不足している情報などございましたら指摘していただけると幸いです。よろしくお願いいたします。

0 likes

2Answer

まず変数$memosにどのような値が入っているのかを確認してください。

名称が複数形になっている点や、エラーメッセージのthis collection instanceから、変数$memosの値はmemo単体ではなく、複数のmemoの集合なのだと想像できます。
periodcreated_atといったプロパティはmemo単体に付随するものです。データが提供するプロパティやメソッドはそれぞれ異なるので、対象の変数に何が入っているのか正しく認識する必要があります。

ひとまずMemo::all()のような形で取得されたデータだと仮定して話を進めます。

解決方法は、memoの集合からそれぞれのperiodcreated_atを自分で取得することです。
具体的な方法としてはループ処理があります。

またEloquentやそのコレクションについて学習すれば、コレクションが提供するメソッドが活用できるかもしれません。

1Like

Your answer might help someone💌