laravel每个产品只有1照片

gfttwv5a  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(123)

我有2个表productsphoto。每个产品有许多照片,我想只显示1张照片的每一个产品,我尝试了这个

$product = DB::table('Products')->join('photos','Products.id','=','photos.product_id')->paginate(8);

我希望你能理解我

iklwldmw

iklwldmw1#

您应该使用Eloquent模型关系来简化您的问题。产品模型应该具有hasMany()方法,照片模型应该具有belongsTo()方法。
此脚本的预期行为是每个产品都显示与该产品相关的第一张查询照片。然后您可以这样调用它们:

$products = Product::with(['photos' => function($query) {
    $query->first();
}])->paginate(8);

或者,如果您仍然必须使用查询生成器,则可以按如下方式调用它们:

$products = DB::table('products')
    ->select('products.*', 'photos.url as photo_url')
    ->join('photos', function($join) {
        $join->on('products.id', '=', 'photos.product_id')
            ->where('photos.id', '=', DB::raw("(SELECT id FROM photos WHERE product_id = products.id LIMIT 1)"));
    })
    ->paginate(8);

最后,您可以在Blade中这样调用它们:

@foreach($products as $product)
    <img src="{{ $product->photo_url }}" alt="{{ $product->name }}">
@endforeach

相关问题