主表产品显示与孩子的最爱的检查,这是产品是列表中的最爱或没有在laravel

pxy2qtax  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个问题,我如何在产品显示控制器中使用Laravel Query检查显示产品是否在Favourite表中列出。
我的数据库结构
1.收藏夹表-- productid --客户ID
1.产品表-- productid -- productname
1.客户表--客户ID --客户名称
我需要一个查询,以显示所有产品与最喜欢的图标显示在每个产品,如果客户在最喜欢的列表中添加的图标将是红色的
我在视图页面内循环中设置了条件,但是否可以检查查询并显示列名称为isFavourite?

  1. @foreach(productsDB as productsRow)
  2. @if (productsRow == FavouriteRow)
  3. <i class="favourite-red">icon-heart</i>
  4. @else
  5. <i class="favourite-white">icon-heart</i>
  6. @endif
  7. @endfor

字符串

5rgfhyps

5rgfhyps1#

这些是模型关系:

  1. class Product extends Model {
  2. public function favourites() {
  3. return $this->hasMany(Favourite::class, 'productid');
  4. }
  5. }
  6. class Favourite extends Model {
  7. public function product() {
  8. return $this->belongsTo(Product::class, 'productid');
  9. }
  10. public function customer() {
  11. return $this->belongsTo(Customer::class, 'customerid');
  12. }
  13. }

字符串
这是一个查询:

  1. $customer = Auth::user();
  2. $products = Product::select('products.*')
  3. ->leftJoin('favourites', function($join) use ($customer) {
  4. $join->on('products.productid', '=', 'favourites.productid')
  5. ->where('favourites.customerid', '=', $customer->id);
  6. })
  7. ->addSelect(DB::raw('CASE WHEN favourites.productid IS NOT NULL THEN 1 ELSE 0 END AS isFavourite'))
  8. ->get();


在刀片中,您可以简单地编写:

  1. @foreach($products as $product)
  2. @if ($product->isFavourite)
  3. <i class="favourite-red">icon-heart</i>
  4. @else
  5. <i class="favourite-white">icon-heart</i>
  6. @endif
  7. @endforeach


这种逻辑将使您的刀片文件更干净。

展开查看全部
z18hc3ub

z18hc3ub2#

是的,你可以通过使用Laravel的Eloquent ORM来执行必要的查询来实现这一点。
假设你有Product、Favourite和Customer的模型,并且它们是正确相关的,你可以这样做:

  1. use App\Models\Product;
  2. use App\Models\Favourite;
  3. $customerId = auth()->user()->id; // Assuming you have authentication and getting customer ID
  4. $products = Product::select('products.*', 'favourites.id as isFavourite')
  5. ->leftJoin('favourites', function($join) use ($customerId) {
  6. $join->on('products.productid', '=', 'favourites.productid')
  7. ->where('favourites.customer_id', '=', $customerId);
  8. })
  9. ->get();

字符串
此查询将获取所有产品沿着一个附加列isFavourite,该列对于非收藏产品为空,并包含收藏产品的收藏ID。
在Blade模板中,您可以使用此信息显示收藏夹图标:

  1. @foreach($products as $product)
  2. @if ($product->isFavourite !== null)
  3. <i class="favourite-red">icon-heart</i>
  4. @else
  5. <i class="favourite-white">icon-heart</i>
  6. @endif
  7. @endforeach


这假设您已经在模型、控制器中正确设置了关系,并且您有方法检索当前已验证用户的ID。如果没有,您可能需要相应地调整代码。

展开查看全部

相关问题