Coder Social home page Coder Social logo

christiankuri / laravel-favorite Goto Github PK

View Code? Open in Web Editor NEW
227.0 6.0 47.0 46 KB

Allows Laravel Eloquent models to implement a 'favorite', 'like', 'remember' and 'follow' features.

License: MIT License

PHP 100.00%
laravel-5-package favorite follow eloquent-models trait like

laravel-favorite's Issues

Missing id column in default favorites table migration

Missing column id in default favorites table migration

when i try to add some model to favorites it generates following query, which requires id column

SQL: insert into "favorites" ("user_id", "favoriteable_id", "favoriteable_type", "updated_at", "created_at") values (1, 2, App\Models\Institution\Institution, 2021-04-19 06:19:59, 2021-04-19 06:19:59) returning "id"

i dont really realize why and where this is happening, i guess it has something to do with relationtship registration

Possible implementation

add id column to default migration, or figure out why eloquent adds requiring "id" to its query and get rid of it

My environment

  • php 7.4
  • laravel 8.36.2

Is there any feature we can use user model as Favoriteability and Favoriteable? Actually I want one user can favorite to another user

Detailed description

Provide a detailed description of the change or addition you are proposing.

Make it clear if the issue is a bug, an enhancement or just a question.

Context

Why is this change important to you? How would you use it?

How can it benefit other users?

Possible implementation

Not obligatory, but suggest an idea for implementing addition or change.

Your environment

Include as many relevant details about the environment you experienced the bug in and how to reproduce it.

  • Version used (e.g. PHP 5.6, HHVM 3):
  • Operating system and version (e.g. Ubuntu 16.04, Windows 7):
  • Link to your project:
  • ...
  • ...

user->favorite() function

Detailed description

How can the user->favorite() function get me an array of the favoriteable items? thank you!

I'm getting a collection with the favoriteable id as an index and didn't know how to change it :"(

Custom Model

Any chance of creating a custom Favorite model and extending the original?

Thanks!

General Question - Toggle Favorite icon with count in view

I have installed your package and added $user = User::first(); $user->toggleFavorite($article); in the articleshow method.

How to create a icon in the view blade file so that when a user clicks on it the logged in user is added to favorites count of the post and when the user clicks it again, he is removed from the favorites count of that article.

I see that there are $user->addFavorite($article); and $user->removeFavorite($article); But how to use them in the controller to gain the functionality i mentioned

Trying to get property of non-object (View: D:\xampp\htdocs\2018\project\resources\views\backend\articles\index.blade.php)

This is how my controller code looks like

public function index()
  {
    $userid = Auth::user()->id;
    $user = Auth::user();
    $favoritevideos = $user->favorite(Video::class);
    $videos = Video::where('created_by', $userid)->latest()->paginate(12);
    return view('backend.videos.index', compact('videos', 'favoritevideos'));
  }

And in my view when i do this

@forelse ($favoritearticles as $article)
                      <div class="col-md-4">
                        <div class="item r-t">
                          <div class="item-media item-media-16by9">
                            <a href="{{ url('articles/'.$article->category->slug.'/'.$article->slug) }}" class="item-media-content" style="background-image: url({{ asset('uploads/articles/'.$article->image) }})"></a>
                          </div>
                          <div class="item-overlay active top p-3">
                            <a href="{{ url('articles/'.$article->category->slug) }}" class="text-u-c badge">{{ $article->category->name }}</a>
                          </div>
                        </div>
                        <div class="p-2 border">
                          <div class="mb-2 h-2x">
                            <a href="{{ url('articles/'.$article->category->slug.'/'.$article->slug) }}" class="_800">{{ $article->title }}</a>
                          </div>
                          <span class="mr-2"><i class="fa fa-eye"></i> {{ $article->getPageViews() }} views</span> <a href="#" class="mr-2"><i class="fa fa-heart-o"></i> {{ $article->favoritesCount }}</a> likes
                        </div>
                      </div>
                    @empty
                      <div class="padding">
                          <span>You have not liked any articles.</span>
                      </div>
                    @endforelse

I see the error
Trying to get property of non-object (View: D:\xampp\htdocs\2018\project\resources\views\backend\articles\index.blade.php)

All the tables are currently empty. When i add an article and favorite it via tinker the error is gone. When i move the project to the live production server initially the project would be empty and it would show error to my client. How to solve this?

Your environment

Environment : Localhost XAMPP
Laravel 5.6
Php 7.1
Windows 7

Trying to get property of non-object on $users = $object->favoritedBy()

Detailed description

It worked on last version, but since I upgraded Laravel to 5.8 I have this error when I try to get a collection of users that have "favorited" an item.

Context

My Favoriteable model is links (user can favourite any link of the application).
My (very simple) Links model:

class Links extends Model
{
	use Favoriteable;
}

My Users model:

class User extends Authenticatable
{
    use Favoriteability;
    [...]
}

In a test controller, I want to

$link = Links::findOrFail(22);
$users = $link->favoritedBy();

Yes link 22 does exist in database :) The error is on $link->favoritedBy(); then on

    public function favoritedBy()
    {
        return $this->favorites()->with('user')->get()->mapWithKeys(function ($item) {
            return [$item['user']->id => $item['user']];
        });
    }

The following are working correctly:

$link = Links::findOrFail($id);
$favoriteCount = $link->favoritesCount;

Will generate select count(*) as aggregate from [favorites] where [favorites].[favoriteable_id] = 22 and [favorites].[favoriteable_id] is not null and [favorites].[favoriteable_type] = 'App\Models\Users\Links' as expected

$link = Links::findOrFail($request->input('link_id'));
$link->toggleFavorite();

Will generate select top 1 1 [exists] from [favorites] where [favorites].[favoriteable_id] = 22 and [favorites].[favoriteable_id] is not null and [favorites].[favoriteable_type] = 'App\Models\Users\Links' and [user_id] = 84 and insert into [favorites] ([user_id], [favoriteable_id], [favoriteable_type], [updated_at], [created_at]) values (84, 22, 'App\Models\Users\Links', '2019-03-19 16:41:19.984', '2019-03-19 16:41:19.984') as expected (same for removing)

Possible implementation

Your environment

  • Laravel 5.8
  • PHP 7.1.26-1+0~20190113101856.12+jessie~1.gbp7077bb
  • Package:
name     : christiankuri/laravel-favorite
descrip. : Allows Laravel Eloquent models to implement a 'favorite' or 'remember' or 'follow' feature.
keywords : ChristianKuri, Follow, favoritable, favorite, favourite, laravel, laravel-favorite, package, remember
versions : * v1.3.0
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
source   : [git] https://github.com/ChristianKuri/laravel-favorite.git a6e519934711c4261ed546426e288432aed26422
dist     : [zip] https://api.github.com/repos/ChristianKuri/laravel-favorite/zipball/a6e519934711c4261ed546426e288432aed26422 a6e519934711c4261ed546426e288432aed26422
names    : christiankuri/laravel-favorite
  • Linux distrib:
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"

problem

how can people who are not signed in add favorit list

Auth::user()->favorite(Model::class) can be only called in a controller or in routes.php

Detailed description

I was trying to get the favorite items of a user when I noticed that no results are shown if the query is performed from blade or livewire. How can we call the method favorite() globally?

Context

Use this method in Blade or with Laravel Livewire

Possible implementation

Could be used like as a Helper function(?)

Your environment

Include as many relevant details about the environment you experienced the bug in and how to reproduce it.

  • PHP8.1, Laravel 8:
  • Mac OS Monterey:

Column id

Why is column ID missing in migration?

Eager load $article->isFavorited()

Detailed description

Hi there!

When i check if article is favorited by auth user

$article->isFavorited()

the debugbar gives me

Model: App\Models\Article => Relation: ChristianKuri\LaravelFavorite\Models\Favorite - You should add with(ChristianKuri\LaravelFavorite\Models\Favorite) to eager-load this relation.

wire controller

/**
   * The read function.
   * @return array
   */
  public function read(): array
  {
    return [
      'articles' => Article::search($this->search)
        ->with('user')
        ->where('status', true)
        ->latest()
        ->paginate($this->perPage),
    ];
  }

  public function render()
  {
    return view('livewire.front.article-wire', $this->read())->layout('layouts.app');
  }

In Article model i tried

protected $with = ['favorites'];

but it didn't work

How could I eager load that?

Thanks!

  • Laravel 9
  • Livewire

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.