4 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
假設(shè)你正確設(shè)置了你的關(guān)系(但事實(shí)并非如此)
您可以通過以下幾種方式使用 Eloquent:
$products = Category::findOrFail($categoryId)->products;
$products = Product::where('category_id', $categoryId)->get();
$products = Product::whereHas('category', function ($query) use ($categoryId) {
? ? $q->where('id', $categoryId);
})->get();

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先,你沒有正確定義你們的關(guān)系。它應(yīng)該是這樣的:
class Product extends Model
{
public function category()
{
return $this->belongsTo('App\Category');
}
}
class Category extends Model
{
public function products()
{
return $this->hasMany('App\Product');
}
}
然后在您的產(chǎn)品遷移文件中,cat_id 應(yīng)重命名為category_id。這樣,您就不需要在關(guān)系上指定外鍵。
我假設(shè)您想列出屬于特定類別的所有產(chǎn)品。您可以使用路由模型綁定輕松地做到這一點(diǎn)。在這種情況下,您的路線應(yīng)類似于:
Route::get('categories/{category:id}/products', [CategoryController::class, 'products']);
然后在你的控制器中:
use App\Category;
class CategoryController extends Controller
{
public function products(Category $category)
{
$category->load('products');
return view('products')->withCategory($category);
}
}
您可以在刀片視圖中訪問產(chǎn)品列表,如下所示:$category->products

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
您需要對(duì)您的Category模型進(jìn)行調(diào)整,因?yàn)镃ategory有很多Products。就目前而言,關(guān)系的命名并沒有反映出這一點(diǎn)
class Category extends Model
{
public function products()
{
return $this->hasMany('App\Product');
}
}
然后您可以通過Category模型訪問產(chǎn)品,如下所示。
$categories = Category::with('products')->all();
$categories->each(function($category) {
$products = $category->products;
// Dump & Die a collection of products
dd($products);
});
注意: 我已使用 with() 方法預(yù)先加載關(guān)系,這只是為了防止 n+1 查詢。有關(guān)急切加載和延遲加載的更多信息可以在文檔中找到。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
你可以做類似的事情,
$products = product::with('categories')->get();
foreach($products as $product)
{
foreach($product->categories as $category)
{
echo $category->name;
}
}
$categories = Category::with('products')->get();
$category = Category::with('products')->find($category_id);
- 4 回答
- 0 關(guān)注
- 279 瀏覽
添加回答
舉報(bào)