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

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

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

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

Q&A

解決済

2回答

7591閲覧

Laravel5 モデルの参照がうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

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

0グッド

0クリップ

投稿2016/09/09 07:52

編集2016/09/09 11:05

各種サイトを参考にLaravelの学習を始めたばかりの初心者ですが、質問させてください。

■環境
CentOS 7.2.1511
Laravel 5.3
Sqlite 3.7.17
PHP 5.6.23
nginx 1.10.1
composer 1.1.3

■モデル
[アプリケーションルート]\app\Article.php

lang

1<?php 2namespace App; 3use Illuminate\Database\Eloquent\Model; 4 5class Article extends Model { 6}

■ルーティング
[アプリケーションルート]\app\Http\routes.php

lang

1<?php 2Route::get('articles', 'ArticlesController@index'); 3Route::get('articles/{id}', 'ArticlesController@show');

■コントローラ
[アプリケーションルート]\app\Http\Controllers\ArticlesController.php

lang

1<?php 2namespace App\Http\Controllers; 3use Illuminate\Http\Request; 4use App\Http\Requests; 5use App\Article; 6 7class ArticlesController extends Controller 8{ 9 public function index() { 10 //下の行をコメントアウトするとページは表示される 11 $articles = Article::all(); 12 13 //このビューは動作確認用の固定テキストを表示するページ 14 return view('articles.index'); 15 } 16 17 //showメソッドは動作する(ページが表示される) 18 public function show($id) { 19 return $id; 20 } 21}

■問題点
コントローラの記述で、Articleモデルからデータを全件取得する行がうまいくいっていない。$articles = Article::all(); の行をコメントアウトするとページが表示されるが、コメントアウトしないと、ブラウザ上ではHTTPエラー500と表示される。

■確認したこと
1.コントローラのindexメソッドは機能しないが、showメソッドは機能する。
2.php artisan tinkerで、プロンプトから
$articles = App\Article::all(); とすると、データは全件表示される。

以上のことから、ルーティングもしくはコントローラの記述に問題があるのではないかと推測しているのですが、どうしても突破できず、質問させていただきました。よろしくお願いいたします。

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

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

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

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

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

natady

2016/09/09 09:13

コードはバッククオート3つで囲ってください。 (空白行) ```php //コード ``` (空白行)
natady

2016/09/09 09:16

設定ファイル`.env`の`APP_DEBUG`の行を`APP_DEBUG=true`に変えて出てくるエラーメッセージはどのようなものでしょうか?
退会済みユーザー

退会済みユーザー

2016/09/09 11:13

natady様、早速のコメントありがとうございます。今日は社外に出てしまいましたので早ければ明日、もしくは月曜日にAPP_DEBUGの件を確認いたします。またコードブロックの囲い方も教えていただけて助かりました。実は私もそうしようと何度もトライしていたのですが、バッククオートではなくシングルクオートだと思い込んでいたため、諦めていました。重ねてお礼申し上げます。
guest

回答2

0

ベストアンサー

natady様、naohiro19様、解決できたので報告させていただきます。
※ベストアンサーはnatady様にさせていただきたいのですが、ボタンが押せないのでこちらに投稿させていただきました。

まず設定がAPP_DEBUG=trueにもかかわらず、ログが環境構築後から一切吐かれていませんでした。これはログファイルの所有者がrootになっていることが原因だったので、所有者をnginxに変更して解決しました。

ログが見れるようになると、データベースが見つからないことが原因だと分かりました。php artisan tinkerでデータ取得できていたので気付かなかったのですが、.envファイルのDB_DATABASEをフルパスで記述せず、アプリケーションホームからの相対パスで記述していたことが原因でした。また私がtinkerでデータ取得を確認する際、必ずカレントディレクトリをアプリケーションホームに移動してからコマンド実行していたので、たまたまうまくいっていたことも分かりました。
お二方、どうもありがとうございました。

投稿2016/09/12 03:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

php

1<?php 2namespace App; 3use Illuminate\Database\Eloquent\Model; 4 5class Article extends Model { 6 protected $table = 'article'; 7}

モデルに上記のようなprotected $table = 'テーブル名'; というプロパティを追加してください。
この記述がないためにElequentがデータベースから取得できなかったのです。

https://readouble.com/laravel/5.1/ja/eloquent.html

投稿2016/09/10 03:09

naohiro19

総合スコア33

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

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

退会済みユーザー

退会済みユーザー

2016/09/10 10:23

naohiro19様、コメントありがとうございます。今日は会社に行くことができなかったので前日の件も含めて検証は月曜日になってしまうこと、ご容赦ください。 ご指摘いただいた部分については、Eloquent規約でデータベーステーブル名が、モデル名の複数形をスネークケースにした文字列がデフォルト扱いで、その場合はテーブル名の記述を省略できるとあったので、書いていませんでした。(テーブル名はarticlesです) ただ、これをトライしていませんので、月曜日やってみて結果UPしたいと思います。
natady

2016/09/10 14:21

`php artisan tinker`で正常に全件取得できていることから、モデルには問題がないと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問