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

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

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

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

Q&A

解決済

1回答

1784閲覧

laravelでherokumにデプロイした後、エラーClass 'App\product' not foundが出る。

ORyohei

総合スコア18

Laravel

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

0グッド

0クリップ

投稿2020/08/04 07:53

編集2020/08/04 08:15

マイグレーションは問題なく成功し、テーブルも作られています。

モデルproductを使ってproductsというテーブルに値を入れることは出来るのですが、モデルproductから値を取ってくる処理にエラーが出ているようです。ローカル環境では問題なく動きます。
全く歯が立たなく困っています。何か考えられる原因はありますでしょうか。

エラーログ (1/1) Error Class 'App\product' not found in HasRelationships.php line 720 at Model->newRelatedInstance() in HasRelationships.php line 327 at Model->hasMany() in User.php line 60 at User->products() in HasAttributes.php line 411 at Model->getRelationshipFromMethod() in HasAttributes.php line 397 at Model->getRelationValue() in HasAttributes.php line 329 at Model->getAttribute() in Model.php line 1523 at Model->__get() in UserController.php line 55 at UserController->index() at call_user_func_array() in Controller.php line 54 at Controller->callAction() in ControllerDispatcher.php line 45 at ControllerDispatcher->dispatch() in Route.php line 219 at Route->runController() in Route.php line 176 at Route->run() in Router.php line 680 at Router->Illuminate\Routing\{closure}() in Pipeline.php line 30 at Pipeline->Illuminate\Routing\{closure}() in RememberMeHandler.php line 25 at RememberMeHandler->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in SubstituteBindings.php line 41 at SubstituteBindings->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in Authenticate.php line 43 at Authenticate->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in VerifyCsrfToken.php line 75 at VerifyCsrfToken->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in ShareErrorsFromSession.php line 49 at ShareErrorsFromSession->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in StartSession.php line 56 at StartSession->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in AddQueuedCookiesToResponse.php line 37 at AddQueuedCookiesToResponse->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in EncryptCookies.php line 66 at EncryptCookies->handle() in Pipeline.php line 163 at Pipeline->Illuminate\Pipeline\{closure}() in Pipeline.php line 53 at Pipeline->Illuminate\Routing\{closure}() in Pipeline.php line 104 at Pipeline->then() in Router.php line 682 at Router->runRouteWithinStack() in Router.php line 657 at Router->runRoute() in Router.php line 623 at Router->dispatchToRoute() in Router.php line 612 at Router->dispatch() in Kernel.php line 176 at Kernel->Illuminate\Foundation\Http\{closure}() in Pipeline.php line 30 at Pipeline->Illuminate\Routing\{closure}() in TransformsRequest.php line 21 at TransformsRequest->handle()

UserController.php

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Mail; use Illuminate\Validation\Rule; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Log; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Str; use Illuminate\Support\Facades\Hash; use phpDocumentor\Reflection\Types\Boolean; use Carbon\Carbon; use App\User; use App\Buyer; use App\Product; use App\Order; use App\EmailReset; use App\Rules\Hankaku; use App\Mail\ChangeEmail; use App\Http\Requests\UserProfileRequest; use App\Http\Requests\ProductRequest; use Request as PostRequest; class UserController extends Controller { //----------------------------------------------------------- //ユーザが投稿した最近の記事5件 //----------------------------------------------------------- public function index(int $id){ $user = User::where('id', $id)->first(); $is_img = $this->isImg(); $products = $user->products->take(5); //ユーザーと商品のリレーションから、最新の5件の商品を取得 $soldOutProducts = $user->soldProduct; //hasmanythroughでusers->products->ordersテーブルをまたいでアクセス。売れた商品を取得 if (!empty($soldOutProducts)) { foreach ($soldOutProducts as $soldOutProduct) { $product_id[] = $soldOutProduct->product_id; }//ordersテーブルのproduct_idカラムを全て取得 if (!empty($product_id)) { $soldOutProducts = Product::whereIn('id', $product_id)->get()->take(5); //productsテーブルのからproduct_id[]の値を元に取得 } } return view('users.index', [ 'products' => $products, 'user' => $user, 'soldOutProducts' => $soldOutProducts, ]); } //---------------------------------------- //出品中の商品 //---------------------------------------- public function onSellProduct(int $id){ $user = User::where('id', $id)->first(); //$idをもとにuser情報取得 $products = $user->products()->paginate(10); //user情報をもとに商品を取得 return view('users.onSellProducts', [ 'user' => $user, 'products' => $products, ]); } //---------------------------------------- //売れた商品 //---------------------------------------- public function soldProduct($id) { $user = User::where('id', $id)->first(); //ユーザー情報 $soldOutProducts = $user->soldProduct; //hasmanythroughでusers->products->ordersテーブルにアクセス。 //ユーザーが出品した商品で売れたものをとる if (!empty($soldOutProducts)) { foreach ($soldOutProducts as $soldOutProduct) { $product_id[] = $soldOutProduct->product_id; Log::debug(print_r( $product_id, true)); } if (!empty($product_id)) { //ordersテーブルから売れた商品のproduct_idを取得 $soldOutProducts = Product::whereIn('id',$product_id)->paginate(10); } } return view('users.soldProducts', [ 'soldOutProducts' => $soldOutProducts, 'user' => $user ]); } //---------------------------------------- //ユーザープロフィール編集 //---------------------------------------- public function profile(int $id){ $user = User::where('id', $id)->first(); $prefs = config('prefectures'); $is_img = $this->isImg(); Log::debug(print_r($is_img, true)); return view('users.profile', [ 'user' => $user, 'prefs' => $prefs, ]); } //---------------------------------------- //ユーザープロフィール編集 //---------------------------------------- // GETパラメータが数字かどうかをチェックする public function update(UserProfileRequest $request, int $id) { $user = User::where('id', $id)->first(); $user->shop_name = $request->shop_name; $user->branch_name = $request->branch_name; $user->prefecture = $request->prefecture ; $user->address = $request->address; if (!empty($request->img)) { Storage::delete('public/userProfile_images', Auth::id() . '.jpg'); Log::debug(print_r($request->img, true)); $user->img = $request->file('img')->storeAs('public/userProfile_images', Auth::id() . '.jpg'); } $user->save(); return back()->with('flash_message', '変更が完了しました'); }

Product.php

<?php namespace App; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Product extends Model { protected $fillable = ['product_name','expiration_date','price','img',]; //---------------------------- //userとのリレーション(1対多) //---------------------------- public function user(): BelongsTo//このメソッドの戻り値の「型」を宣言 { return $this->belongsTo('App\User'); } //---------------------------- //buyerとのリレーション(多対多) //product->ordersで自分を買ったバイヤーの情報取得 //product->orders()->attachで中間テーブル更新 //---------------------------- public function orderBuyer(): BelongsToMany { return $this->belongsToMany('App\Buyer', 'orders','product_id', 'buyer_id')->withTimestamps(); }//第二引数には中間テーブルのテーブル名 //---------------------------- //ログインしているバイヤーがその商品を購入済みかの確認 //---------------------------- public function isOrderedBy(buyer $buyer): bool { //viewから受け取った情報がbuyerモデルであることを確認 //返り値がboolであることを確認 // $a = $this->orders; return $buyer ?(bool)$this->orderBuyer->where('id', $buyer->id)->count() :false; //buyerモデルを参照して中間テーブルにアクセス。 //ログインしているバイヤーのidをもとにordersテーブルから //product->buyer->orders->>where('id', $buyer->id)->count() //buyerモデルのコレクションが返る。 //thisはviewから送られてきたproduct // $order = $buyer->buyers()->where('product_id', $id)->count(); //$buyer->buyers()でbuyerモデルからordersテーブル経由で紐付いているproductモデルのコレクションが返る } public function hasOrders(): HasOne//OK { return $this->hasOne('App\Order'); } }
### 環境 mysql5.5 laravel5.8

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

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

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

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

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

m.ts10806

2020/08/04 08:04

エラーだけで分かることは少ないので、実際のコードをご提示ください。 推測での答えを求めるのはエスパーを強いていることになります。
ORyohei

2020/08/04 08:16

コードを追加させていただきました!
m.ts10806

2020/08/04 08:18

エラーと定義が合いません。 エラー:App\product 定義:App\Product エラーはコピペしてますか?
ORyohei

2020/08/04 08:46

リレーションを張った時に定義したモデルが小文字になっていたというイージーミスでした。。全く木月書きませんでした。ありがとうございます!!
mikkame

2020/08/04 10:44 編集

解決おめでとうございます!ご自身で回答を書いて、自己BAで閉めてください!
guest

回答1

0

自己解決

リレーションを張った時に定義したモデルが小文字になっていたというイージーミスでした

投稿2020/08/04 10:57

ORyohei

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問