LoginSignup

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

結合させたものの値が入っていない

解決したいこと

laravelで一覧画面を作成しています。
forechの$product->company_nameの部分が、
デバッグして確認すると
値が入っておらず、表示されません。

DBにproductsテーブルとcompaniesテーブルがあり、
company_nameはcompaniesテーブルにあります。

2つのテーブルをleft joinで結合し、
表示させようとしましたが、できませんでした。

どこを直せば、表示されるのでしょうか?
教えて頂きたいです。

SELECT 
    `products`.`img_path`, 
    `products`.`product_name`, 
    `products`.`price`, 
    `products`.`stock`, 
    `products`.`comment`, 
    `products`.`id`, 
    `companies`.`company_name` 
FROM 
    `products` 
LEFT JOIN 
    `companies` 
ON 
    `products`.`company_id`=`companies`.`id`;

該当するソースコード

list.blade.php
<table class="table">
    <thead class="thead-light">
        <tr>
            <th hidden>ID</th>
            <th>商品画像</th>
            <th>商品名</th>
            <th>価格</th>
            <th>在庫数</th>
            <th>メーカー名</th>
        </tr>
    </thead>
    <tbody>
    @foreach ($products as $product)
        <tr>
            <td hidden>{{ $product->id }}</td>
            <td><img src="{{ asset('storage/image/' . $product->img_path) }}"></td>
            <td>{{ $product->product_name }}</td>
            <td>{{ $product->price }}</td>
            <td>{{ $product->stock }}</td>
            <td>{{ $product->company_name }}</td>
            <td>
                <a href="product/{{ $product->id }}">
                    <button type="submit" class="btn btn-primary">詳細</button>
                </a>
                <form action="{{ route('delete', ['id'=>$product->id]) }}" method="post">
                @csrf
                    <button type="submit" class="btn btn-danger">削除</button>
                </form>
            </td>
        </tr>
    @endforeach
    </tbody>
ProductController.php
 /** 
     * 
     * @return view
    */
    public function showList() {
        $products = Product::all()->paginate(10);
        $companies = Company::all();
        //dd($products->all());
        return view('list',['products' => $products,'companies'=> $companies]);
    }
0

2Answer

laravelは知見がないので外れてたら申し訳ないですが、Product:allって書くだけでテーブル結合動く感じですか?
ormの部分でleft joinとか指定するのかな?と。

public function showList() {
    $products = Product::all()->paginate(10);

もし、上記が関係ない場合はleft joinはnull値を持つ物もjoinしてしまうので、company_nameに値が入っているものだけ結合したいのであればinner joinとかで試してみたらどうでしょうか。

2

Comments

  1. @mochikichi32

    Questioner
    返信遅くなりました。
    回答ありがとうございます!
    やってみます

forechの$product->company_nameの部分が それ以外は値が入っている前提です。

4択のinner join(join), left join, right join, full joinをトライしてみては?

きっと、想定した内容が得られると思います。

1

Comments

  1. @mochikichi32

    Questioner
    返信遅くなりました。
    回答ありがとうございます!

    参考にしてみます!

Your answer might help someone💌