Как показать размеры продукта, связанные с продуктом, используя laravel? - PullRequest
1 голос
/ 17 января 2020

Я хочу показать размеры продукта, связанные с продуктом. Я уже создал чёрно-белые таблицы в базе данных. Я просто хочу знать, что при нажатии на указанный продукт c размер, связанный с этим продуктом, будет показан в функция table.inside, как сделать объединение ч / б трех таблиц, пожалуйста, сделайте таблицу объединения, используя класс DB, потому что мне будет легко понять, спасибо.

У кого-нибудь есть идея?

  please check product sizes image 
  https://i.stack.imgur.com/Yt6Jk.png

База данных

    product_sizes  table
   ----------------------------------------------------
   id   |  size_name  | Body_length  |  Body_width | 
   ----------------------------------------------------
    1    |    M        |     2.3       |      3.4
    2    |    L        |     .5        |      4.4
    3    |    s        |     2.5       |      3.2
    4    |    xs       |     3.5       |      2.4


   products table
  ----------------------------------------
   id   |  product_name | Description |  
  ----------------------------------------
   1     Ultraclub 1   | Ultraclub 300 |
   2     Ultraclub 2   | Ultraclub 200 |
   3     Ultraclub 3   | Ultraclub 500 |
   4     Ultraclub 4   | Ultraclub 600 |
   5     Ultraclub 5   | Ultraclub 400 |



  available_product_sizes table
  ----------------------------------------
   id   |  product_id  | product_size_id  
  ----------------------------------------
   1     | 2           |  1
   2     | 3           |  4
   3     | 4           |  3
   4     | 1           |  2
   5     | 2           |  3

Контроллер

         public function single_product($product_slug){

         $Sizes=DB::table('product_sizes')->get();    

         $single_product=DB::table('products')->where('product_slug',$product_slug)->get();

         return view('front_end/single_product',compact('single_product','Sizes'));
        }

html просмотр

             <div class="product-tabs__pane product-tabs__pane--active" id="chart">
              <table class="table table-bordered text-center">
              <tr style="background-color:#3366cc;color:white">
              <td><b>Sizes</b>
              </td>
              <td><b>Body length</b>
              </td>
              <td><b>Body width</b>
              </td>
              <td><b>Sleeve length</b>
              </td>
              </tr>
              @foreach($Sizes as  $size)
              <tr>
            <td><b>{{$size->sizes_name}}</b>
            </td>
            <td>{{$size->Body_length}}</td>
            <td>{{$size->Body_width}}</td>
            <td>{{$size->Sleeve_length}}</td>
            </tr>
            @endforeach
            </table>
            </div>

Ответы [ 2 ]

1 голос
/ 17 января 2020

Ответ на вопрос без использования eloquent

use Illuminate\Support\Facades\DB; //include this
$products = DB::table('products as p')
     ->join('available_product_sizes as aps','aps.product_id','p.id')
     ->join('product_sizes ps','ps.id','aps.product_size_id')
     ->where('product_slug',$product_slug)->get();

Но настоятельно рекомендуется использовать красноречивые отношения.

1 голос
/ 17 января 2020

Я предполагаю, что у вас уже есть / определено отношение "многие ко многим" между products и product_sizes таблицами

//App\Product.php

public function sizes()
{
    return $this->belongsToMany('App\ProductSize', 'available_product_sizes', 'product_id', 'product_size_id');
}

//App\ProductSize.php
public function products()
{
    return $this->belongsToMany('App\Product', 'available_product_sizes', 'product_size_id', 'product_id');
}

Для того, чтобы получить доступные размеры продукта, вы можно использовать:

$sizes = App\Product::find(1)->sizes()->orderBy('size_name')->get();

Исправление контроллера

public function single_product($product_slug) {

    $single_product = Product::with('sizes')->where('product_slug',$product_slug)->first();

    return view('front_end/single_product',compact('single_product'));
}

Просмотр исправления

//...
@foreach($single_product->sizes as  $size)
        <tr>
            <td>
               <b>{{$size->sizes_name}}</b>
            </td>
            <td>{{$size->Body_length}}</td>
            <td>{{$size->Body_width}}</td>
            <td>{{$size->Sleeve_length}}</td>
        </tr>
@endforeach
//...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...