在 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();
我有三个 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();