在 blade 视图中访问控制器功能的正确方法是什么 - Laravel
What is the proper way to access the controller function inside the blade view - Laravel
我是 laravel 的新手。我要访问 products
属于 category
。它们之间存在 One-to-Many 关系。为了获取这些数据,我在 ProductsController
中创建了一个名为 getCtgProducts()
的函数来执行此操作。
我知道直接从视图查询数据库是一种不好的做法,因此我在控制器中编写数据库查询并尝试在 blade.
中访问它
谁能告诉我哪里做错了?
在 blade 视图中访问控制器功能的正确方法是什么? 我正在使用 Laravel Framework v9.7.0
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It is working. Showing the correct ctgs names
<div class=container>
@if (isset($products))
@foreach ({{ App\Http\Controllers\ProductsController::getCtgProducts($ctg->id) }} as $product)
<h1> $product->name </h1>
@endforeach
@endif
</div>
@endforeach
ProductsController
class
<?php
namespace App\Http\Controllers;
use App\Models\Ctg;
use App\Models\Product;
class ProductsController extends Controller
{
public function index(Request $request)
{
$products = Product::all();
$ctgs = Ctg::all();
return view('ui\welcome', compact('products', 'ctgs'));
}
public static function getCtgProducts(){
$ctgProducts = DB::table('products')->where('ctg_id', $ctgId);
return $ctgProducts;
}
}
从 blade 调用控制器是不好的做法
将您的 getCtgProducts() 方法逻辑移动到 Category Model:
public function getCtgProducts(){
$ctgProducts = DB::table('products')
->where('ctg_id', $this->id)->get();
return $ctgProducts;
}
Blade 文件:
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It is working. Showing the correct ctgs names
<div class=container>
@foreach ($ctg->getCtgProducts() as $product)
<h1> $product->name </h1>
@endforeach
</div>
@endforeach
更好的方法:
因为有 one-to-many 关系
在类别模型中你应该有一个关系方法:
public function products() {
return $this->hasMany(Product::class);
}
Blade:
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It
is working. Showing the correct ctgs
names
<div class=container>
@foreach ($ctg->products as
$product)
<h1> $product->name </h1>
@endforeach
</div>
@endforeach
我是 laravel 的新手。我要访问 products
属于 category
。它们之间存在 One-to-Many 关系。为了获取这些数据,我在 ProductsController
中创建了一个名为 getCtgProducts()
的函数来执行此操作。
我知道直接从视图查询数据库是一种不好的做法,因此我在控制器中编写数据库查询并尝试在 blade.
中访问它谁能告诉我哪里做错了?
在 blade 视图中访问控制器功能的正确方法是什么? 我正在使用 Laravel Framework v9.7.0
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It is working. Showing the correct ctgs names
<div class=container>
@if (isset($products))
@foreach ({{ App\Http\Controllers\ProductsController::getCtgProducts($ctg->id) }} as $product)
<h1> $product->name </h1>
@endforeach
@endif
</div>
@endforeach
ProductsController
class
<?php
namespace App\Http\Controllers;
use App\Models\Ctg;
use App\Models\Product;
class ProductsController extends Controller
{
public function index(Request $request)
{
$products = Product::all();
$ctgs = Ctg::all();
return view('ui\welcome', compact('products', 'ctgs'));
}
public static function getCtgProducts(){
$ctgProducts = DB::table('products')->where('ctg_id', $ctgId);
return $ctgProducts;
}
}
从 blade 调用控制器是不好的做法 将您的 getCtgProducts() 方法逻辑移动到 Category Model:
public function getCtgProducts(){
$ctgProducts = DB::table('products')
->where('ctg_id', $this->id)->get();
return $ctgProducts;
}
Blade 文件:
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It is working. Showing the correct ctgs names
<div class=container>
@foreach ($ctg->getCtgProducts() as $product)
<h1> $product->name </h1>
@endforeach
</div>
@endforeach
更好的方法: 因为有 one-to-many 关系 在类别模型中你应该有一个关系方法:
public function products() {
return $this->hasMany(Product::class);
}
Blade:
@foreach ($ctgs as $ctg)
<h1> $ctg->name </h1> // -- It
is working. Showing the correct ctgs
names
<div class=container>
@foreach ($ctg->products as
$product)
<h1> $product->name </h1>
@endforeach
</div>
@endforeach