Как использовать отношения Laravel для получения данных из базы данных - PullRequest
0 голосов
/ 14 мая 2018

Я работаю на домашней странице, на которой мне нужно показать слайдер Поставщик категории функций.Слушай, это то, что я хочу:

Я хочу получить случайную таблицу категорий из 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 

То, что я пробовал до сих пор.

Я хотел бы дать 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 и его отношениях.Я делаю это, используя eloquent в laravel.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Поскольку вы используете опору, отношение «многие ко многим» возможно.В этом случае вы хотите использовать 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();
0 голосов
/ 14 мая 2018

Пожалуйста, обратитесь к этой документации: https://laravel.com/docs/5.6/eloquent-relationships

Вы должны написать функции отношений для обеих моделей, которые связаны друг с другом.

Пожалуйста, сделайте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...