Php 如何获取所有关系集合?
我有3种型号:Php 如何获取所有关系集合?,php,laravel,laravel-5,laravel-5.7,Php,Laravel,Laravel 5,Laravel 5.7,我有3种型号: 公司、类别、产品 公司类别和产品类别之间有很多关系 如何从公司获得所有产品 我的代码: $company = Company::findOrFail($id); if (isset($company->categories)){ $categories = $company->categories; if (isset($categories->first()->products)){ $products = $cate
- 公司、类别、产品
- 公司类别和产品类别之间有很多关系
$company = Company::findOrFail($id);
if (isset($company->categories)){
$categories = $company->categories;
if (isset($categories->first()->products)){
$products = $categories->first()->products;
}
}
但是,我的代码只返回第一类的产品。也许您可以这样做
$company = Company::findOrFail($id);
$categories_ids = $company->category->pluck('id');
$products = Product::whereIn('category_id',$categories_ids')->get();
你也许可以用HassThrouthMany
class Category extends Model
{
public function posts()
{
return $this->hasManyThrough(
'App\Product',
'App\Company',
'category_id', // Foreign key on company table...
'company_id', // Foreign key on product table...
'id', // Local key on category table...
'id' // Local key on company table...
);
}
}
您可以在中阅读更多信息
请试试这个,让我知道它是如何工作的:)也许你可以这样做
$company = Company::findOrFail($id);
$categories_ids = $company->category->pluck('id');
$products = Product::whereIn('category_id',$categories_ids')->get();
你也许可以用HassThrouthMany
class Category extends Model
{
public function posts()
{
return $this->hasManyThrough(
'App\Product',
'App\Company',
'category_id', // Foreign key on company table...
'company_id', // Foreign key on product table...
'id', // Local key on category table...
'id' // Local key on company table...
);
}
}
您可以在中阅读更多信息
请尝试一下,并让我知道它是如何工作的:)这里有两个问题 首先,您需要修改您的关系以避免N+1查询问题 其次,如果要访问属于所有类别的所有产品,则不能在类别关系上调用
first()
。相反,您需要在其上循环
以下几点应该行得通
$company = Company::with('categories.products')
->findOrFail($id);
if ($company)) {
foreach ($company->categories as $category) {
foreach ($category->products as $product) {
// Access your Product model here
}
}
}
这里有两件事不对 首先,您需要修改您的关系以避免N+1查询问题 其次,如果要访问属于所有类别的所有产品,则不能在类别关系上调用
first()
。相反,您需要在其上循环
以下几点应该行得通
$company = Company::with('categories.products')
->findOrFail($id);
if ($company)) {
foreach ($company->categories as $category) {
foreach ($category->products as $product) {
// Access your Product model here
}
}
}
听说过“急装”吗?@Viney不,我不知道这是什么?听说过“急装”吗?@Viney不,我不知道这是什么这是多对多。。。我想。公司有许多门类,而门类有许多产品。不管怎样,你都可以使用第一种解决方案。另外,如果你有一个类别中的产品,但与公司不对应,可能你需要其他关系来连接公司和产品。这是多对多。。。我想。公司有许多门类,而门类有许多产品。任何方法都可以使用第一种解决方案。另外,如果您有一个类别中的产品,但与公司不对应,那么您可能需要其他关系来连接公司和产品。