Laravel : 忽略 blade 模板中的 object

Laravel : Ignore object in blade template

我有一个关于 Laravel 最佳实践的问题。我有一个显示我所有产品的 blade 页面,我测试我的产品是否在我的循环中有图像,如果是这样我会忽略它:

       @foreach ($products as $product)
            @if(is_null($product->getMedia()->first())) 
                @continue
            @endif 
            <div class="col-md-4">
                 //display image and product informations
            </div>
        @endforeach

我的问题是: 这样对吗 ?

或者我发现我忽略了控制器中没有图像的产品?

谢谢!

这取决于您的媒体。如果和你的product一样table就可以,但是如果是关系,最好在你的controller里面过滤一下

这取决于您是否认为没有任何图片的产品是 "invalid" / "inactive",或者您只是不想在此特定视图中显示它们。

您的控制器正在定义类似 "fetch all products which match certain conditions" 的业务需求。如果 "has an image" 是该业务需求的一部分,因为任何没有图像的产品都不应该销售,那么逻辑就会进入您的控制器。

您的视图正在定义特定的演示文稿,例如 "arrange the products in a pretty grid"。如果 "has an image" 只是在此布局中工作的要求,则跳过此处可能是合理的。

但是,完全跳过视图中的产品可能会产生一些不良后果:

  • 如果这些产品应该打折,正如控制器退货所暗示的那样,隐藏它们意味着客户看不到它们。
  • 如果您有分页,或者找到的结果总数,它将与用户实际可以看到的产品数量不匹配,除非您小心处理跳过的产品。

因此,如果您要构建某种类型的 "highlights",则最适合跳过的产品实际上会显示在列表的下方,只是不会那么显眼。