laravel - 在 Laravel 中合并两个集合并访问它
问题描述
好的,这是我的问题:我还没有找到一个合适的解决方案来“合并”(不确定它是否是正确的词)laravel 中的两个集合。我将向您展示我的代码,它会自行解释。
所以这是我蹩脚的方式代码,但我很确定有更好的方法来做到这一点:
这是我的控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Product;
use App\ProductPhoto;
class ProductController extends Controller
{
public function index() {
$products = Product::all();
$photos = ProductPhoto::all();
return view('/products')->with([
'products' => $products,
'photos' => $photos
]);
}
}
我的观点是这样的;
@foreach($products as $product)
@foreach($photos as $photo)
@if($photo->product_id = $product->id)
<img src="/products/{{ $product->id }}/{{ $photo->filename }}">
@endif
@endforeach
@endforeach
但我想在产品集合中包含与产品相关的所有照片。我想有一个简单的观点:
@foreach($products as $product)
@foreach($product->photos as $photo)
<img src="/products/{{ $product->id }}/{{ $photo->filename }}"
@endforeach
@endforeach
或者比这更简单的另一种方式。我一直在尝试合并,但我不认为这是我需要的,我不知道。或者也许我这样做的方式是正确的,但我对此表示怀疑。
谢谢阅读 !
解决方案
我建议为此使用雄辩的关系。为此,您需要在名为 的产品类上创建关系photos
。这看起来像这样:
class Product extends Model
{
...
public function photos()
{
return $this->hasMany(ProductPhoto::class);
}
...
}
完成此操作后,您可以更新控制器,因为您不再需要从模型中获取照片。为了提高性能,您可以急切地加载照片。
public function index() {
$products = Product::with('photos')->get();
return view('/products')->with([
'products' => $products
]);
}
最后,您可以更新视图以使用photos
关系。
@foreach($products as $product)
@foreach($product->photos as $photo)
<img src="/products/{{ $product->id }}/{{ $photo->filename }}"
@endforeach
@endforeach
我希望这会有所帮助。
推荐阅读
- laravel - 在 Laravel Nova 中按条件隐藏按钮“创建和添加另一个”
- file - jmeter JSR223 groovy覆盖文件
- amazon-web-services - 当我的应用程序端口关闭时触发 Lambda 函数
- xslt-2.0 - 从 xml 访问值的任何方式
- makefile - 有没有办法拥有多个通配符?
- javascript - SCRIPT5007:在 IE 浏览器上特别需要的对象
- linear-algebra - 具有扩展对称矩阵/张量支持的 Autodiff 包
- node.js - 如何在 aws lambda 上设置 gm (GraphicsMagick)?
- listview - ListView 构建器内的 ListView 构建器
- python - 鳄梨数据框的 For 循环