如果相关模型具有或不具有值作为新字段,则返回

时间:2018-03-27 06:15:10

标签: php laravel eloquent query-builder laravel-query-builder

我有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不存在。

1 个答案:

答案 0 :(得分:1)

您可以使用am accessor并将该属性添加到append protected变量中:

$post->is_liked // bool

现在您还可以查看访问者,如

{{1}}