首页 > 解决方案 > 如何使用 laravel 关系从数据库中获取数据

问题描述

我在一个主页上工作,我必须在其中显示功能类别供应商滑块。听到的是我想要的:

我想从类别表中获得随机的 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 

到目前为止我所尝试的。

我已经尝试提供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 中使用 eloquent 来做这件事。

标签: laraveleloquent

解决方案


由于您使用枢轴,因此可以使用“多对多”关系。在这种情况下,您要使用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();

推荐阅读