我有三个表:用户,想法和 ideas_likes 。 ideas_likes表看起来像:
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的更新解决方案运作良好。
答案 0 :(得分:1)
首先,不需要创建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我希望结果中包含数据透视表中的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();