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

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

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

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

Q&A

解決済

2回答

11916閲覧

laravel エラー内容不明

silent_skill

総合スコア19

Laravel

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

0グッド

0クリップ

投稿2019/07/19 06:05

laravel 入門という書籍を進めていた時に、下記のようなエラーが出ました。

ErrorException (E_ERROR)
Undefined property: stdClass::$mail (View: C:\Users\87saku\Desktop\laravelapp\resources\views\hello\index.blade.php)
Previous exceptions
Undefined property: stdClass::$mail (0)

ネットで調べてみましたが、何が原因でこのエラーが発生したのかわかりません。

わかる方いましたら、教えて下さい。

php

1@extends('layouts.helloapp') 2 3@section('title', 'Index') 4 5@section('menubar') 6 @parent 7 インデックスページ 8@endsection 9 10@section('content') 11 <table> 12 <tr><th>Name</th><th>Mail</th><th>Age</th></tr> 13 @foreach ($items as $item) 14 <tr> 15 <td>{{$item->name}}</td> 16 <td>{{$item->mail}}</td> 17 <td>{{$item->age}}</td> 18 </tr> 19 @endforeach 20 </table> 21@endsection 22 23@section('footer') 24copyright 2017 tuyano. 25@endsection 26

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Http\Response; 7use App\Http\Requests\HelloRequest; 8use Validator; 9use Illuminate\Support\Facades\DB; 10 11class HelloController extends Controller 12{ 13 14 15public function index(Request $request) 16{ 17 $items = DB::select('select * from people'); 18 return view('hello.index', ['items' => $items]); 19} 20 21public function post(Request $request) 22{ 23 $validate_rule = [ 24 'msg' => 'required', 25 ]; 26 $this->validate($request, $validate_rule); 27 $msg = $request->msg; 28 $response = new Response(view('hello.index', ['msg'=>'「' . $msg . '」をクッキーに保存しました。'])); 29 $response->cookie('msg', $msg, 100); 30 return $response; 31} 32} 33 34

php

1<?php 2 3use Illuminate\Support\Str; 4 5return [ 6 7 /* 8 |-------------------------------------------------------------------------- 9 | Default Database Connection Name 10 |-------------------------------------------------------------------------- 11 | 12 | Here you may specify which of the database connections below you wish 13 | to use as your default connection for all database work. Of course 14 | you may use many connections at once using the Database library. 15 | 16 */ 17 18 'default' => env('DB_CONNECTION', 'sqlite'), 19 20 /* 21 |-------------------------------------------------------------------------- 22 | Database Connections 23 |-------------------------------------------------------------------------- 24 | 25 | Here are each of the database connections setup for your application. 26 | Of course, examples of configuring each database platform that is 27 | supported by Laravel is shown below to make development simple. 28 | 29 | 30 | All database work in Laravel is done through the PHP PDO facilities 31 | so make sure you have the driver for your particular database of 32 | choice installed on your machine before you begin development. 33 | 34 */ 35 36 'connections' => [ 37 38 'sqlite' => [ 39 'driver' => 'sqlite', 40 'url' => env('DATABASE_URL'), 41 'database' => env('DB_DATABASE', database_path('database.sqlite')), 42 'prefix' => '', 43 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 44 ], 45 46 'mysql' => [ 47 'driver' => 'mysql', 48 'url' => env('DATABASE_URL'), 49 'host' => env('DB_HOST', '127.0.0.1'), 50 'port' => env('DB_PORT', '3306'), 51 'database' => env('DB_DATABASE', 'forge'), 52 'username' => env('DB_USERNAME', 'forge'), 53 'password' => env('DB_PASSWORD', ''), 54 'unix_socket' => env('DB_SOCKET', ''), 55 'charset' => 'utf8mb4', 56 'collation' => 'utf8mb4_unicode_ci', 57 'prefix' => '', 58 'prefix_indexes' => true, 59 'strict' => true, 60 'engine' => null, 61 'options' => extension_loaded('pdo_mysql') ? array_filter([ 62 PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), 63 ]) : [], 64 ], 65 66 'pgsql' => [ 67 'driver' => 'pgsql', 68 'url' => env('DATABASE_URL'), 69 'host' => env('DB_HOST', '127.0.0.1'), 70 'port' => env('DB_PORT', '5432'), 71 'database' => env('DB_DATABASE', 'forge'), 72 'username' => env('DB_USERNAME', 'forge'), 73 'password' => env('DB_PASSWORD', ''), 74 'charset' => 'utf8', 75 'prefix' => '', 76 'prefix_indexes' => true, 77 'schema' => 'public', 78 'sslmode' => 'prefer', 79 ], 80 81 'sqlsrv' => [ 82 'driver' => 'sqlsrv', 83 'url' => env('DATABASE_URL'), 84 'host' => env('DB_HOST', 'localhost'), 85 'port' => env('DB_PORT', '1433'), 86 'database' => env('DB_DATABASE', 'forge'), 87 'username' => env('DB_USERNAME', 'forge'), 88 'password' => env('DB_PASSWORD', ''), 89 'charset' => 'utf8', 90 'prefix' => '', 91 'prefix_indexes' => true, 92 ], 93 94 ], 95 96 /* 97 |-------------------------------------------------------------------------- 98 | Migration Repository Table 99 |-------------------------------------------------------------------------- 100 | 101 | This table keeps track of all the migrations that have already run for 102 | your application. Using this information, we can determine which of 103 | the migrations on disk haven't actually been run in the database. 104 | 105 */ 106 107 'migrations' => 'migrations', 108 109 /* 110 |-------------------------------------------------------------------------- 111 | Redis Databases 112 |-------------------------------------------------------------------------- 113 | 114 | Redis is an open source, fast, and advanced key-value store that also 115 | provides a richer body of commands than a typical key-value system 116 | such as APC or Memcached. Laravel makes it easy to dig right in. 117 | 118 */ 119 120 'redis' => [ 121 122 'client' => env('REDIS_CLIENT', 'predis'), 123 124 'options' => [ 125 'cluster' => env('REDIS_CLUSTER', 'predis'), 126 'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_', 127 ], 128 129 'default' => [ 130 'url' => env('REDIS_URL'), 131 'host' => env('REDIS_HOST', '127.0.0.1'), 132 'password' => env('REDIS_PASSWORD', null), 133 'port' => env('REDIS_PORT', 6379), 134 'database' => env('REDIS_DB', 0), 135 ], 136 137 'cache' => [ 138 'url' => env('REDIS_URL'), 139 'host' => env('REDIS_HOST', '127.0.0.1'), 140 'password' => env('REDIS_PASSWORD', null), 141 'port' => env('REDIS_PORT', 6379), 142 'database' => env('REDIS_CACHE_DB', 1), 143 ], 144 145 ], 146 147]; 148

plain

1APP_NAME=Laravel 2APP_ENV=local 3APP_KEY=base64:+VfLB/yFVcBMwMh3gKX9FHHJIiRNEG/ULHa9eD+p1cs= 4APP_DEBUG=true 5APP_URL=http://localhost 6 7LOG_CHANNEL=stack 8 9DB_CONNECTION=sqlite 10DB_HOST=127.0.0.1 11DB_PORT=3306 12DB_DATABASE=C:\Users\87saku\Desktop\laravelapp\database\database.sqlite 13DB_USERNAME=homestead 14DB_PASSWORD=secret 15 16REDIS_HOST=127.0.0.1 17REDIS_PASSWORD=null 18REDIS_PORT=6379 19 20MAIL_DRIVER=smtp 21MAIL_HOST=smtp.mailtrap.io 22MAIL_PORT=2525 23MAIL_USERNAME=null 24MAIL_PASSWORD=null 25MAIL_ENCRYPTION=null 26 27AWS_ACCESS_KEY_ID= 28AWS_SECRET_ACCESS_KEY= 29AWS_DEFAULT_REGION=us-east-1 30AWS_BUCKET= 31 32PUSHER_APP_ID= 33PUSHER_APP_KEY= 34PUSHER_APP_SECRET= 35PUSHER_APP_CLUSTER=mt1 36 37MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 38MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 39

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

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

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

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

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

guest

回答2

0

書いてある通りです

ErrorException (E_ERROR) Undefined property: stdClass::$mail (View: C:\Users\87saku\Desktop\laravelapp\resources\views\hello\index.blade.php) Previous exceptions Undefined property: stdClass::$mail (0)

index.blade.phpでmailというプロパティが見つかりません。と書いてあります。

では、mailはどこで使われているか?

<td>{{$item->mail}}</td>

ここですね?、itemにmailというプロパティがないのではないでしょうか?
itemsテーブルにmailカラムは存在しますか?

laravel入門って青い本ですよね?
言いにくいのですが、あまり評判が良くないようです
(あえて、Laravel的じゃないやり方を最初にさせてから、あとでLaravelならこんなに便利にできるよ、みたいに説明し、「あえて」の部分で初心者が困り、経験者からしたらなんでそんな方法でやるの?Laravelならこうでしょ、と言われ本の内容と乖離する)

投稿2019/07/19 06:13

mikkame

総合スコア5036

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

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

m.ts10806

2019/07/19 06:22

>青い本 そういえば「捨てるところから始めよう」って言ってる人がどこかにいたような。 その本の関係の質問を見るたびに「書籍で進めずに良かった」と感じています。 確かに「とりあえず本の通りに進めていきましょう」とすすめる人もいるにはいますが、 オブジェクト指向きちんとおさえないまま今回のような壁にぶつかる質問者が量産されているだけの 現状から「捨てるところから」という考えには賛同せざるを得ません。
guest

0

ベストアンサー

まずは下記でGoogle翻訳
Undefined property: stdClass::$mail

意訳すると:そんなプロパティは定義されてねぇっ

です。

同様の現象が再現するミニマムコード

php

1<?php 2class Test{ 3 public $a=1; 4} 5$t = new Test; 6echo $t->a; 7echo $t->b; 8

今回は$items = DB::select('select * from people');をビューに渡して表示させようとしているみたいですが、その中にmailというプロパティがないことを指していると思います。
※LaravelではDBセレクト結果を別オブジェクトに保管しています。

まずは下記のようにして内容確認してみてください。

php

1$items = DB::select('select * from people'); 2dd($items);

※dd()は処理をそこで止めて変数の内容を整形して出力するデバッグ用の機能です。覚えておきましょう。

そこで「mail」という情報が存在しないのであればpeopleテーブルにmailというカラムを追加するか、
ビューで出力しているところを削るかどちらかでご対応ください。

投稿2019/07/19 06:12

編集2019/07/19 06:24
m.ts10806

総合スコア80850

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

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

silent_skill

2019/07/19 11:28

ありがとうございました。 dd()を使ったら、落ち着きました。 覚えておきます。 皆さんの回答に感謝します。
m.ts10806

2019/07/19 12:36

「落ち着いた」のがなんのことか分かりませんが、エラーの意味を調べることとdd()によるデバッグは質問前にも可能なので、今後活用してください。 特にデバッグが的確にできるようになるだけで自己解決力が一気にあがります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問