如何使用laravel关系从数据库中获取数据

时间:2018-05-14 17:16:08

标签: laravel eloquent

我正在浏览一个主页,我必须在其中显示“功能类别供应商”滑块。 听到我想要的东西:

我想获得随机3个特色类别表格类别表,每个类别有6个供应商,我也想显示。

数据库结构:

类别表包含is_featured标志。

id  | is_featured

1   |   1
2   |   1
3   |   1
4   |   1
... so on

我有供应商类别表,其中我已经映射了供应商和类别。

SupplierCategoryMappingTable

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做这件事。

2 个答案:

答案 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();