Zion Comer
Zion Comer

Reputation: 43

laravel hasMany polymorphic relationship in where clause

I am trying to select the picture with the most likes within a specific category from my database. I have a database table storing the pictures and a table storing the likes. The pictures table is related to likeable table through a hasMany polymorphic relationship.

Like model:

    public function likeable() 
    {
        return $this->morphTo();
    }

Picture model:

 public function likes()
 {
     return $this->morphMany('App\Like', 'likeable');
 }

Home Controller:

Picture::where('picture_type', 'food')->orderBy(likes(), 'desc')->first();

Likeable Migration:

    public function up()
{
    Schema::create('likeable', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id');
        $table->integer('likeable_id');
        $table->string('likeable_type');
        $table->timestamps();
    });
}

So far, the above line of code, in my home controller returns an error. From what I understand, the likes method has to be called on a specific instance. However, I do not know how to implement this all the while keeping my where clause.

Thank you for your help.

Upvotes: 0

Views: 580

Answers (1)

James
James

Reputation: 16339

I assume you are wanting to order pictures by the most likes.

In which case, you want something like this:

Picture::withCount('likes')->where('picture_type', 'food')->orderBy('likes_count', 'desc')->first(); 

Upvotes: 1

Related Questions