如何检查返回的集合关系中是否存在变量

How can I check a variable exist in returned collection relationship or not

我在User.phpClass有这样的关系:

public function favourites()
    {
        return $this->belongsToMany(Product::class, 'favourite_products', 'usr_id', 'prd_id')->withTimestamps();
    }

并且我已将 $user_favourites = \App\User::find(auth()->user()->usr_id); 添加到 return 用户信息。

然后,如果我 @dd($user_favourites->favourites),我得到的结果是:

现在我想检查当前产品 ID 是否等于 returned 集合的 prd_id(在 14 中显示为图片).

那我该怎么做呢?

我尝试将其添加到模型中,但return出现错误:

public function available_favourite($id) {
        return $this->favourites()->where('prd_id','=', $id);
    }

并这样称呼它:

@dd($user_favourites->available_favourite($product->prd_id)->get())

这里是错误:

SQLSTATE[23000]:违反完整性约束:1052 列 'prd_id' 在 where 子句中不明确

那么如何检查 $user_favourites->favourites 中是否存在当前产品 ID?

您可以使用集合的 contains 方法来检查是否存在这样的 prd_id

public function available_favourite($id) : bool 
{
   return $this->favourites->contains('prd_id', $id);
}

//then check
dd($user_favourites->available_favourite($product->prd_id))

$this->favourites() 中排除 () 只是为了引用关系。

More info.