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

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

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

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

1回答

578閲覧

joinを使って結合したテーブルからfindで指定したidに関する情報だけを表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 6

Laravel 6は、オープンソースなPHPのフレームワーク。Webアプリケーションの開発に適しており、バージョン6はLTSです。5.8での向上に加えて、セマンティックバージョニングの採用やLaravel Vaporとのコンパチビリティなどが変更されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2023/04/16 17:03

laravelを勉強し始めた初心者です

list.blade.phpに表示している一覧から「詳細表示」をクリックしたらクリックしたものの詳細画面がdetail.blade.phpで表示できるようにしたいと思っています

joinを使ってproductsテーブルとcompaniesテーブルを結合させ
findでproductsテーブル内の指定したidに関する情報だけを取得したいのですがidの指定がうまくできていないとエラーが出てしまいます

自分ではどうにもできなかったので投稿しました
どなたかご助力頂けないでしょうか


productsテーブル 一部

+--------+------------+--------------+-------+-------+ | id | company_id | product_name | price | stock | +--------+------------+--------------+-------+-------+ | 1 | 1 | 商品1 | 100 | 10 | | 2 | 1 | 商品2 | 150 | 10 | | 3 | 2 | 商品3 | 200 | 20 | | 4 | 3 | 商品4 | 400 | 20 | +--------+------------+--------------+-------+-------+

companiesテーブル 一部

+--------+--------------+---------------------+ | id | company_name | representative_name | +--------+--------------+---------------------+ | 1 | 株式会社1 | 商品1 | | 2 | 株式会社2 | 商品2 | | 3 | 3株式会社 | 商品3 | +--------+--------------+---------------------+

list.blade.php 一部

<div class="links"> <table> <thead> <tr> <th>id</th> <th>メーカー名</th> <th>商品名</th> <th>価格</th> <th>在庫数</th> <th>商品画像</th> </tr> </thead> <tbody> @foreach ($products as $product) <tr> <td>{{ $product->id }}</td> <td>{{ $product->company_name }}</td> <td>{{ $product->product_name }}</td> <td>{{ $product->price }}</td> <td>{{ $product->stock }}</td> <td>{{ $product->img_path }}</td> <td><a href="{{ route('detail', ['id'=>$product->id]) }}" class="btn">詳細表示</a></td> </tr> @endforeach </tbody> </table> </div>

detail.blade.php 一部

<table> <thead> <tr> <th>商品情報ID</th> <th>メーカー</th> <th>商品名</th> <th>価格</th> <th>在庫数</th> </tr> </thead> <tbody> <tr> <td>{{ $details->id }}</td> <td>{{ $details->company_id }}</td> <td>{{ $details->product_name }}</td> <td>{{ $details->price }}</td> <td>{{ $details->stock }}</td> </tr> </tbody> </table>

web.php

Route::get('/detail/{id}','ProductController@showDetail')->name('detail');

ProductController 一部

class ProductController extends Controller { public function showDetail($id) { $model = new Product(); $details = $model->findId($id); return view('detail', compact('details')); } }

ProductModel 一部

class Product extends Model { public function findId($id) { $products = DB::table('products') ->select('products.id','company_name','product_name','price','stock') ->join('companies', 'products.company_id', '=', 'companies.id') ->find($id); return $products; } }

発生しているエラーメッセージ

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select `products`.`id`, `company_name`, `product_name`, `price`, `stock` from `products` inner join `companies` on `products`.`company_id` = `companies`.`id` where `id` = 1 limit 1)

試したこと

Model内のselectで'companies.id as companies_id'のように名前を変更することでエラーを回避できるというような記事をいくつか見たので試しましたが解決できませんでした

補足情報(FW/ツールのバージョンなど)

Laravel version
6.20.44
PHP version
7.4.16

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

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

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

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

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

guest

回答1

0

条件で指定している id がどちらのテーブルの id かわからなくてエラーになっていると思います。
find でやるのが難しそうであれば where で条件指定するのも1つの手かなと思います。

投稿2023/04/16 23:44

ogihara

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問