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

pxy2qtax  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(45)

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

@foreach(productsDB as productsRow)
    @if (productsRow == FavouriteRow)
        <i class="favourite-red">icon-heart</i>
    @else
        <i class="favourite-white">icon-heart</i>
    @endif
@endfor

字符串

5rgfhyps

5rgfhyps1#

这些是模型关系:

class Product extends Model {
    public function favourites() {
        return $this->hasMany(Favourite::class, 'productid');
    }
}

class Favourite extends Model {
    public function product() {
        return $this->belongsTo(Product::class, 'productid');
    }

    public function customer() {
        return $this->belongsTo(Customer::class, 'customerid');
    }
}

字符串
这是一个查询:

$customer = Auth::user();

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


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

@foreach($products as $product)
    @if ($product->isFavourite)
        <i class="favourite-red">icon-heart</i>
    @else
        <i class="favourite-white">icon-heart</i>
    @endif
@endforeach


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

z18hc3ub

z18hc3ub2#

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

use App\Models\Product;
use App\Models\Favourite;

$customerId = auth()->user()->id; // Assuming you have authentication and getting customer ID

$products = Product::select('products.*', 'favourites.id as isFavourite')
    ->leftJoin('favourites', function($join) use ($customerId) {
        $join->on('products.productid', '=', 'favourites.productid')
             ->where('favourites.customer_id', '=', $customerId);
    })
    ->get();

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

@foreach($products as $product)
    @if ($product->isFavourite !== null)
        <i class="favourite-red">icon-heart</i>
    @else
        <i class="favourite-white">icon-heart</i>
    @endif
@endforeach


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

相关问题