我有Post模型和相关Likes项目。我试图返回如果相关模型有一行经过身份验证的用户。表格如下:
Posts
- id
- body
- etc
Likes
- id
- user_id
- likable_type
- likeable_id
现在我发回了Posts::get()
的帖子,但是我希望返回每个模型中带有is_liked
内部参数的模型,该参数显示经过身份验证的用户是否喜欢该帖子。
如果我使用->with('likes')->where(function($q)) {}
方法,它只会返回用户喜欢的帖子,但这不是我想要的。
我希望每个Post对象都显示经过身份验证的用户是否喜欢它。例如:Post { id, body, is_liked }
在运行for循环旁边有没有办法实现这个目的?处理这种情况的最佳方法是什么?
更新
class Post extends Model {
protected $appends = ['is_liked'];
public function getIsLikedAttribute() {
return $this->has('likes.user_id', '=', Auth::id())->exists();
}
public function likes() {
return $this->morphOne('App\Like', 'likeable');
}
}
class Like extends Model {
protected $fillable = [
'user_id', 'likeable_id', 'likeable_type'
];
public function likeable() {
return $this->morphTo();
}
}
但是,通过此变形进行编写,$this->has('likes.user_id'
部分会返回错误
方法Illuminate \ Database \ Query \ Builder :: user_id不存在。
答案 0 :(得分:1)
您可以使用am accessor并将该属性添加到append protected变量中:
$post->is_liked // bool
现在您还可以查看访问者,如
{{1}}