#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();