Взаимосвязь таблиц SQL с Laravel

Я довольно новичок в Laravel и в основном посвятил большую часть своего времени разработке Codeigniter в прошлом, так как это то, чем занимается моя работа по большей части.

В настоящее время я создаю веб-сайт клиента, а также создаю собственную CMS (как для опыта, так и для конкретных потребностей клиента).

В настоящее время я пытаюсь понять, как работать с отношениями в Laravel / Eloquent, например, у меня есть таблица products . Каждый продукт может иметь type . Я храню эти типы в отдельной таблице, чтобы иметь возможность лучше контролировать их в будущем, когда контент начнет накапливаться. Все, что мне нужно, это запрос, чтобы получить все продукты с их типом. В других средах я мог бы просто сделать это, используя построитель запросов для определения столбцов и объединений, однако из-за того, как работает Eloquent, я изо всех сил пытаюсь найти способ сделать это!

Просто для некоторого контекста, в CMS будет иметь данные о продуктах, которые будут отображать все продукты в системе, и один из столбцов будет type , однако я хочу показать имя типа, а не id .

Возможно, я глупый, поэтому не стесняйтесь указывать на что-то очевидное!

Всего 2 ответа


То, что вы ищете, это «Eager Loading», которая находится здесь в документации: https://laravel.com/docs/5.8/eloquent-relationships#eager-loading

В их примере на веб-сайте вы можете заменить их «Книгу» на «Продукт», а затем «Автор» на «Тип», и вы добьетесь того, что пытаетесь сделать.

Если вы хотите загрузить отношения в представлениях, то есть с помощью Blade, вам нужно сделать что-то вроде следующего:

@foreach($products as $product)
  <div> {{ $product->type->name }} </div>
@endforeach

Вы можете искать with() функции with() это будет полезно в этом: в вашем примере вам нужно связать модель product моделью type поэтому в продукт вы добавите

`public function type()
    {
      return $this->hasOne(Type::class);
    }`

и в типе добавить

public function Product()
{
  return $this->belongsTo(Product::class);
}

и ваш запрос будет

$result=Product::with("type")->get();

это вернет строку связанного типа с каждой строкой связанного продукта, так как в этом примере пользователь с профилем

и вы можете получить имя типа для каждой строки продукта из

foreach($result as $res){
    $type_name=$res->type->name;
  }

Есть идеи?

10000