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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

10056閲覧

[Laravel5.1]tinkerでPHP Fatal error: Class 'User' not found in eval()'d code

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2017/09/16 21:36

編集2017/09/17 05:52

Lara帳
こちらを進めています。

tinkerで$articles = User::find(1)->articles();
と打ち込んだところPHP Fatal error: Class 'User' not found in eval()'d code on line 1と返ってきます。

app\User.php

<?php namespace App; use Illuminate\Auth\Authenticatable; use Illuminate\Database\Eloquent\Model; use Illuminate\Auth\Passwords\CanResetPassword; use Illuminate\Foundation\Auth\Access\Authorizable; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; class User extends Model implements AuthenticatableContract,CanResetPasswordContract // AuthorizableContract, { public function articles() { return $this->hasMany('App\Article'); } use Authenticatable, Authorizable, CanResetPassword; /** * The database table used by the model. * * @var string */ protected $table = 'users'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['name', 'email', 'password']; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = ['password', 'remember_token']; }

class User で追加してあるはずなのにfatal エラーが何故返ってくるのでしょうか・・・。
できるならこのまま(34)まで終わらせたいのですが参考にする物を変えたほうがいいのでしょうか。ご教示ください。

.env

APP_ENV=local APP_DEBUG=true APP_KEY=3BeZmW7Eu7ArtxToJOtT5EM1SkvLqVgn DB_CONNECTION=sqlite DB_HOST=localhost DB_DATABASE=database DB_USERNAME=homestead DB_PASSWORD=secret CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=your_address@gmail.com MAIL_FROM_NAME=your_name MAIL_USERNAME=your_address@gmail.com MAIL_PASSWORD=your_password MAIL_PRETEND=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET=

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

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

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

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

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

guest

回答1

0

ベストアンサー

App\User::find(1)にしてください。名前空間が定義されているのでApp\をつけないと見つけられません。

<?php namespace App; // ←名前空間が定義されている // 以降に書かれているものは名前空間が適用されているので、class Userの完全修飾名はApp\Userになる。 class User。。。

投稿2017/09/16 23:10

編集2017/09/16 23:14
fagai

総合スコア2158

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

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

退会済みユーザー

退会済みユーザー

2017/09/17 04:41 編集

ありがとうございます。 App\を付け足したところエラーが変わりました。 Call to a member function articles() に変わったのですが、なぜこうなるのでしょうか・・ artisan tinker find でgoogle検索をしてできることをやったのですが、 >>> App\User::find(1); => null >>> App\User::all(); => Illuminate\Database\Eloquent\Collection {#719 all: [], } となりました。そもそもデータベースにアクセスできていないのでしょうか・・・database.sqliteの中身にちゃんとidが入っていることも確認しました。
fagai

2017/09/17 05:48

.envの中身はどのように指定していますか?
退会済みユーザー

退会済みユーザー

2017/09/17 05:54

現在の.envの中身追記しました。 DBの部分に関しては、ちゃんとdatabase.sqliteにデータ追加されてたので問題ないと思ってました。 MAILの設定部分が影響してたりするのでしょうか・・・(パート31の部分がまだできてなくて、そのままになっています)
fagai

2017/09/17 05:59

んーちゃんとできているように見えますね。 データが入ってないだけとかでは無いんですよね?
退会済みユーザー

退会済みユーザー

2017/09/17 07:47 編集

はい、pupsqliteでデータ入ってること確認しました。 DB_USERNAME,_PASSWORDが違うからうまくいかない、などあったりしますか? 16:35追記:database.sqlieがdatabaseとsqliteフォルダ両方にないと動かない状態だったので、双方にdatabase.sqliteがある状態です。sqliteフォルダのほうがusersテーブルに入っていなかったので上書きしましたが、同じエラーのままです。
退会済みユーザー

退会済みユーザー

2017/09/17 09:38 編集

(6)のデータベース環境設定まで戻りtinkerで App\User::all()->toArray(); を実行したところ [] としか返ってきませんでした。 9/17/18:32追記:VM起動してもう一件適当なユーザー情報を登録しようとしたところ、AuthorizableContract,がないと言われたので見本通りに消すのを忘れていたのを思い出し、消したところ もう1件追加できたので、tinkerでApp\User::all()->toArray();を実行したところ2件の情報が登録されていました。次に$articles = App\User::find(1)->articles();を実行したところ Illuminate\Database\Eloquent\Relations\HasMany {#691}と返ってきました。 Lara帳には「Userに関連付く Articleをn件取得できるようになります」と書いてあったので 返ってくる情報がこれでいいのかわかりません。
fagai

2017/09/17 11:42

articles()がうごいてないのはその先が書かれてないからです。 $articles = App\User::find(1)->articles; だとコレクションがとれます。 https://readouble.com/laravel/5.1/ja/eloquent-relationships.html#one-to-many articles()と()を含めた場合はクエリービルダーと同等なので、 $comments = App\Post::find(1)->comments()->where('title', 'foo')->first(); みたいに続けて取る感じになりますね。
退会済みユーザー

退会済みユーザー

2017/09/17 11:56 編集

ありがとうございます。 よくわからないので、ドキュメントの見本真似て $articles = App\User::find(1)->articles()->where('title','body')->first(); と打ち込んでみたところ、 Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1 no such column: articles.user_id (SQL: select * from "articles" where "articles"."user_id" = 1 and "articles"."user_id" is not null and "title" = body limit1)' と返ってきました。 メソッドチェーン(?)で書けばいいというのはなんとなくわかりましたがどうすれば求めているものが引き出せるのかがわかっていません・・・
fagai

2017/09/17 12:02 編集

それはテーブルのリレーションを上手く組んでないからでしょう。(where('title','body')も何をしたかったのかいまいち分かりませんが) articlesというテーブルにデータを引っ張ってこれるようにするためのuser_idというカラムは存在していますか?
退会済みユーザー

退会済みユーザー

2017/09/17 12:06

すみません、何を結果として引っ張ってくるのかという解釈もできていなかったです。見本の様子を見ると、articlesテーブル内の記事の数と内容を持ってこようとしているのでしょうか? また、articlesのなかにはuser_idというカラムはないです。 (ここまでで作るような事はなかったです)
fagai

2017/09/17 12:13

usersテーブルのidが1のものを取得し、それに紐づく記事(articles)を取得しようとしています。 articlesにはどのユーザーが書いたものか判断するために、user_idのカラムを追加してデータを追加しておくことでデータが取得できるようになります。 一応ここのuser_idというカラム名はテーブル名の単数形+_idという形じゃないとLaravelは自動的に認識してくれません。(手動で指定することも可能ですが)
fagai

2017/09/17 12:15

正直個人のブログ記事でずっと続いてる続きものが書かれているとは思いにくいです。。。
退会済みユーザー

退会済みユーザー

2017/09/17 12:23

そうですね・・・自分でも追うのに疲れてきてしまっていますし、申し訳ないです。。 他に自分で読み進めていけばwebアプリ完成までたどり着けて、理解もできるような見本があればいいのですが・・・
退会済みユーザー

退会済みユーザー

2017/09/17 12:40

ありがとうございます。 もう5.5をインストールしてドキュメントの制作物をやるか、5.1のドキュメントをやるか、本のパーフェクトPHPその他の教材をやるか、という感じでしょうか。Laravelを選んだのは、しんどいですけど使えるようになっておけば実際に仕事ができるようになったとき、選択肢が国内だけに留める必要がなくなるかも、と考えたからです。
fagai

2017/09/17 12:46

PHP自体の知識が不足しているならフレームワーク以前にPHPの基礎知識を入れたほうが良いと思います。 まあORMに関しては最初は把握できないのが普通だと思うので、たくさんドキュメントを見たり、Qiita等からEloquentの使い方の記事を探すのが良いと思います。 5.1を選ぶのは一旦問題ないです。どんどん難しくなっていってる傾向なので。。。
退会済みユーザー

退会済みユーザー

2017/09/17 12:56 編集

Laravelを扱うに足るPHPの基礎知識、はどうしたら得られるでしょうか?「気づけばプロ並PHP」の本を終わらせた後、Laravelの学習に入ってからエラー続き、検索続きだった時にPHPのリファレンスを見ることが少しあったのですが、つかめませんでした。 user_idのカラムの件なのですが、(31)のMIGRATIONパートに追加する段取りが書かれていました。単純に後まで見てなかっただけで申し訳ないです・・・。
fagai

2017/09/17 13:09

PHPのマニュアルは言語のマニュアルとしては一番日本人に分かりやすく書かれていると思います。 私の場合ですが、パーフェクトPHPをやるのは結構多きかったですね。特に自分でフレームワークを作る章は何度か反復して理解しようとしました。 あとはソースコードをちゃんと読もうとすることが重要だと思います。(分からなかったメソッドなどは調べたり) 基本的な知識は質問主さんは持っている雰囲気があるので、composerの知識、PSR-0~4の知識、あとはほかのフレームワークとかも触ったりしてフレームワークの基本部分みたいなものをふわーっと頭の中に入れる感じなのかなと。 先程も書いたとおり、ORMに関してはフレームワークをやろうとすると必ずと言っていいほど存在するのでどうにか理解していくしかないでしょう。
fagai

2017/09/17 13:16 編集

段取りが書いてあったなら、どうにかできそうですかね・・・。 いや、やってみるしかないかなと思います。
退会済みユーザー

退会済みユーザー

2017/09/17 13:23 編集

ありがとうございます。 書店には気が向いたら行って、「どんな本があるかなー 覚えたほうがいいと思うこと書いてる本ないかなー」とか思いながら見ています。 パーフェクトPHPのレッスンで「フレームワークを作る」ところがあるように書いてあったのを見たときはこれほしいかもってなりました。 composerの知識に関しては、Laravelを触るぞってなった時に初めてだったので0からでした。PSRに関しては今はじめて知りました・・・ 他のフレームワークを少し触ってみることにかんしては、cakePHPが妥当でしょうか。(日本国内ではスタンダードみたいですね) ORMは「ORM」というアルファベットの並びを覚えた程度で意味と内容までちゃんと入ってないので改めて読み込みます・・・。 user_idのカラムを作る以降の事は明日以降改めて進んでみます。 $articles = User::find(1)->articles();の、データ取得方法に関しては改めて理解できるように頑張ります。 今夜も長々とありがとうございましたm_ _m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問