Как показать значение из laravel eloquent relationship

#laravel #eloquent #relationship

#laravel #eloquent #отношения

Вопрос:

У меня есть такие таблицы

 products - id, name, description, category_id, brand_id, color_id, material_id, price
extras - id, product_id, size_id, stock
images - id, product_id, name, path
size - id, name
  

Модель продукта :

 public function extra()
{
    return $this->hasMany('AppExtra', 'product_id', 'id');
}

public function image()
{
    return $this->hasMany('AppImage', 'product_id', 'id');
}
  

Модель extra :

 public function size()
{
    return $this->hasOne('AppSize', 'id', 'size_id');
}

public function product()
{
    return $this->belongTo('AppProduct', 'product_id', 'id');
}
  

Образ модели :

 public function product()
{
    return $this->belongsTo('AppProduct', 'product_id', 'id');
}
  

как получить имя размера, имя изображения и значение пути из таблиц extras и images?
Я могу получить имя размера, используя этот запрос echo $product[‘extra’][0][‘size’][‘name’];, но я получаю только одно значение, я не знаю, как выполнить цикл, чтобы получить все значение.

 $products = Product::with(['brand', 'category', 'color', 'image', 'material', 'extra', 'user'])->get();
foreach ($products as $product)
{
echo $product['name'] ." ". strip_tags($product['description']) ." ". $product['category']['name'] ." ". $product['brand']['name'] ." ". $product['color']['name'] ." ". $product['material']['name'] ." ". $product['price'] ." ". $product['sku'] ." ". $product['user']['name'] ."</br>";
echo $product['extra'][0]['size']['name'];
}
  

Любое предложение, что мне нужно сделать, или что-то, что я могу прочитать, чтобы решить это? Спасибо.

Ответ №1:

Я считаю, что приведенный ниже код будет работать для вас :

 // Extra relationship in Product.php
public function extra()
{
    return $this->hasMany('Appextra', 'product_id', 'id');
}

// To get product extra with eager loading 
$products = Product::with(['extra', 'extra.size'])->get();

foreach ($products as $product)
{
  foreach ($product->extra as $extra){
    echo $extra->size->name
  }
}
  

Комментарии:

1. Извините, но как насчет значения изображения, то, что я хочу для значения изображения, становится одной строкой с данными продукта. 1 продукт имеет много изображений. Как это сделать? Потому что, если я сделаю то же самое для изображения, результат станет таким: имя и т. Д., размер, изображение1; имя и т. Д., размер, изображение2; имя и т. Д., размер, изображение3; я хочу: имя и т. Д., размер, изображение1, изображение2, изображение3;

2. foreach ($products как $product) { foreach ($product->изображение как $sinleImage){ echo $sinleImage->имя; echo $sinleImage->путь } }

3. это не работает, я попробовал, тогда результат будет таким же, как этот: имя и т. Д., Размер, изображение1; имя и т. Д., размер, изображение2; имя и т. Д., размер, изображение3;

4. @gigi ваш вопрос немного запутанный, пожалуйста, уточните. (Как насчет значения изображения, то, что я хочу для значения изображения, становится одной строкой с данными продукта. 1 продукт имеет много изображений. Как это сделать?)

5. Прошу прощения за мой плохой английский. Я попытаюсь объяснить это прямо сейчас, если я выполню программу, Результатом будет название продукта и т. Д., Размер, изображение1; название продукта и т. Д., размер, изображение2;. Что мне нужно, так это название продукта и т. Д., Размер, изображение1, изображение2;. Я буду использовать эти данные для отображения в таблицах данных. можно ли понять объяснение? и извините, если объяснение вас смущает. Или какие-либо предложения по дизайну базы данных? должен ли я просто поместить изображение данных в таблицу продуктов, чтобы я мог удалить таблицу изображений?

Ответ №2:

Продукт содержит несколько значений каждого отношения, которое вы реализуете «с помощью», поэтому запустите цикл foreach или попробуйте это для конкретного результата
$products-brand-> where(«НЕКОТОРОЕ УСЛОВИЕ»)-> get();