我正在浏览一个主页,我必须在其中显示“功能类别供应商”滑块。 听到我想要的东西:
我想获得随机3个特色类别表格类别表,每个类别有6个供应商,我也想显示。
数据库结构:
is_featured
标志。id | is_featured
1 | 1
2 | 1
3 | 1
4 | 1
... so on
我有供应商类别表,其中我已经映射了供应商和类别。
id | sup_id | cat_id
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
4 | 4 | 4
5 | 5 | 5
...so on
供应商表格,其中包含供应商详细信息。
id | sup_name ....Other details
1 | ABC
2 | DEF
3 | HIJ
4 | LLK
5 | OPQ
6 | SDE
...so on
我有trid给hasMany
关系,但得到空项目数组。我认为该类别有很多供应商,所以我添加了很多。
public function supplierList()
{
return $this->hasMany('App\DB\Supplier\SupplierCategoryDetail', 'cat_id', 'id');
}
有些我如何计算得到随机类别。但在使用with()
后,它会给出空的结果。
$data['featured_category'] = Category::with('supplierList')->where('status','1')->inRandomOrder()->limit(3)->get();`
我在laravel中是全新的,这是关系。我正在使用雄辩的laravel做这件事。
答案 0 :(得分:1)
Please refer to this documentation: https://laravel.com/docs/5.6/eloquent-relationships
You should write relationship functions on both the models which are related to each other.
Please do this:
Category.php
public function supplierCategory()
{
return $this->hasMany('App\SupplierCategory');
}
Supplier.php
public function supplierCategory()
{
return $this->hasMany('App\SupplierCategory');
}
SupplierCategory.php
public function supplier()
{
return $this->belongsTo('App\Supplier');
}
public function category()
{
return $this->belongsTo('App\Category');
}
Controller.php
$results = SupplierCategory::inRandomOrder()->limit(3)->get();
return view('index', compact('results'));
index.blade.php
@foreach($results as $result)
{{$result->supplier}}
{{$result->category}}
@endforeach
答案 1 :(得分:1)
由于您使用了一个枢轴,因此可以实现“多对多”关系。在这种情况下,您想使用belongsToMany
。
您的关系如下:
return $this->belongsToMany(
'App\DB\Supplier\SupplierCategoryDetail',
'SupplierCategoryMappingTable', // or what the name is of the table
'cat_id',
'sup_id'
);
此外,我在类别表中看不到status
列。看起来应该是is_featured
。
如果没有测试,我认为您的最终查询可能如下:
Category::with('supplierList')
->where('is_featured', '1')
->inRandomOrder()
->limit(3)
->get();