2015-04-13 5 views
2

Я использую Laravel для создания приложения CRUD, но я немного застрял. То, что я хочу сделать, - отобразить соответствующую категорию из категории «категории» для каждого продукта из таблицы «продукты». Я попытался сжать две таблицы в одном представлении и создать @foreach в @foreach, но только перечисленные все категории вместо назначения соответствующей категории на основе category_id из таблицы продуктов.Laravel 5 Передайте данные из двух таблиц на вид

Контроллер

$products = products::all(); 
$categories = categories::all(); 

return View::make('products.index')->with('products', $products)->with('categories', $categories); 

Просмотр

@foreach($products as $key => $value) 
    <tr> 
     <td>{!! $value->id !!}</td> 
     <td>{!! $value->product_name !!}</td> 
     @foreach($categories as $key2 => $value2) 
      <td>{!! $value2->category !!}</td> 
     @endforeach 
     <td>{!! $value->product_price !!}</td> 
     <td>{!! $value->updated_at !!}</td> 
     <td> 
@endforeach 

продукты таблица

Schema::create('products', function($table) 
    { 
     $table->increments('id'); 
     $table->integer('category_id')->unsigned()->nullable(); 
     $table->string('product_name', 255)->unique(); 
     $table->decimal('product_price', 10, 4); 
     $table->dateTime('updated_at')->default(DB::raw('CURRENT_TIMESTAMP')); 
    }); 

    Schema::table('products', function($table) { 
     $table->foreign('category_id')->references('id')->on('categories'); 
    }); 

категории Таблица

Schema::create('categories', function($table) 
    { 
     $table->increments('id'); 
     $table->string('category', 255)->unique(); 
     $table->dateTime('updated_at')->default(DB::raw('CURRENT_TIMESTAMP')); 
    }); 
+0

Когда вы делаете '$ products = products :: all();' и '$ categories = categories :: all();', то нет ничего, что автоматически связывает две результирующие коллекции. Вот почему вы получаете весь список категорий из своего внутреннего цикла. –

+0

Есть ли способ в Laravel связать каждый продукт с соответствующей категорией? Я искал ответ, и что, и я нашел решение креатином сводной таблицы. Но я думаю, может быть, есть более простой способ сделать это. – Netra

+0

Да, я думаю, что есть более простой метод. Во-первых, имеет ли продукт потенциально несколько категорий или один? –

ответ

1

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

$products = DB::table('products') 
    ->join('categories', 'products.category_id', '=', 'categories.id')->get(); 

Если каждый товар имеет только одну категорию, то ваш вид может быть упрощен.

@foreach($products as $key => $value) 
    <tr> 
     <td>{!! $value->id !!}</td> 
     <td>{!! $value->product_name !!}</td> 
     <td>{!! $value->category !!}</td> 
     <td>{!! $value->product_price !!}</td> 
     <td>{!! $value->updated_at !!}</td> 
    </tr> 
@endforeach 
+0

Это работает. Я никогда не думал об использовании таблицы соединений. Я должен больше смотреть на объединения. Спасибо. – Netra

+0

Добро пожаловать. –

Смежные вопросы