在 Laravel 中,如何为 "likes" 表建立关系?另外,如何在查询中包含该信息?

In Laravel, how to set up a relationship for a "likes" table? Also, how to include that information in a query?

我有三个 table:用户想法ideas_likes 。 ideas_likes table 看起来像:

ideas_likes
------------
id        primary key
user_id   foreign key
idea_id   foreign key
liked     boolean

用户和想法之间已经建立了一对多的关系。它看起来像这样:

class User extends Ardent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    protected $table = 'users';

    public function ideas()
    {
        return $this->hasMany('Idea');
    }   

}

同样,想法模型如下所示:

class Idea extends Ardent {

    protected $table = 'ideas';

    public function user()
    {
        return $this->belongsTo('User');
    }

}

我的第一个问题是:如何创建 IdeaLike 模型?一旦完成,使用 Eloquent,我如何检索用户所有喜欢的想法?

============================================= ==============================

Lucasgeiter 的更新解决方案效果很好。

首先,无需创建 IdeaLike 模型。你只需要一个many-to-many relationship

用户

public function ideas(){
    return $this->belongsToMany('Idea', 'ideas_likes')->withPivot('liked');
}

想法

public function users(){
    return $this->belongsToMany('User', 'ideas_likes')->withPivot('liked');
}

(通过添加 withPivot 我告诉 Laravel 我想在结果中包含枢轴 table 的 liked 列)

用法

$user = User::find(1);
$likedIdeas = $user->ideas()->where('liked', true)->get();


顺便说一句:如果 $table 是型号名称的复数形式,则无需指定

更新

看来您确实确实需要一对多和多对多关系。

所以你的最终关系应该是这样的:

用户

public function ideas(){
    return $this->hasMany('Idea');
}

public function liked(){
    return $this->belongsToMany('Idea', 'ideas_likes')->withPivot('liked');
}

想法

public function likes(){
    return $this->belongsToMany('User', 'ideas_likes')->withPivot('liked');
}

public function user(){
    return $this->belongsTo('User');
}

(我只是为对我来说有意义的关系选择了名称。您显然可以更改它们)

用法

某个用户喜欢的想法:(id = 1)

$ideas = Idea::where('user_id', 1)->whereHas('likes', function($q){
    $q->where('liked', true);
})->get();