我有2个表products和photo。每个产品有许多照片,我想只显示1张照片的每一个产品,我尝试了这个
products
photo
$product = DB::table('Products')->join('photos','Products.id','=','photos.product_id')->paginate(8);
我希望你能理解我
iklwldmw1#
您应该使用Eloquent模型关系来简化您的问题。产品模型应该具有hasMany()方法,照片模型应该具有belongsTo()方法。此脚本的预期行为是每个产品都显示与该产品相关的第一张查询照片。然后您可以这样调用它们:
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
1条答案
按热度按时间iklwldmw1#
您应该使用Eloquent模型关系来简化您的问题。产品模型应该具有
hasMany()
方法,照片模型应该具有belongsTo()
方法。此脚本的预期行为是每个产品都显示与该产品相关的第一张查询照片。然后您可以这样调用它们:
或者,如果您仍然必须使用查询生成器,则可以按如下方式调用它们:
最后,您可以在Blade中这样调用它们: