for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace CSlant\LaravelLike;
use CSlant\LaravelLike\Enums\InteractionTypeEnum;
use CSlant\LaravelLike\Models\Like;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* Trait UserInteraction
* use this trait in your User model
*
* @package CSlant\LaravelLike\Traits
* @mixin Model
* @method HasMany hasMany(string $related, string $foreignKey = null, string $localKey = null)
*/
trait UserHasInteraction
{
* Get all likes of the user. This method is used for eager loading.
* @return HasMany
public function likes(): HasMany
$interactionModel = (string) (config('like.interaction_model') ?? Like::class);
$userForeignKey = (string) (config('like.users.foreign_key') ?? 'user_id');
return $this->hasMany($interactionModel, $userForeignKey);
}
* Check if the user has liked the given model.
* @param string $interactionType
* @return static
public function forgetInteractionsOfType(string $interactionType): static
$this->likes()->where('type', $interactionType)->delete();
return $this;
* @param null|string $interactionType
public function forgetInteractions(?string $interactionType = null): static
if ($interactionType && in_array($interactionType, InteractionTypeEnum::getValuesAsStrings())) {
return $this->forgetInteractionsOfType($interactionType);
$this->likes()->delete();