我正在使用Laravel创建一个CRUD应用程序,但我有点卡住了。我想做的是为“产品”表中的每个产品显示“类别”表中的共同响应类别。我试图在一个视图中压缩这两个表,并在@foreach中创建一个@foreach,但它只列出所有类别,而不是根据products表中的category_id分配相应的类别。
控制器
$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'));
});
可以使用连接在一个查询中获取每个产品的类别。
$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