【问题标题】:Custom methods on Model Laravel and VueModel Laravel 和 Vue 上的自定义方法
【发布时间】:2018-06-28 02:37:06
【问题描述】:

我目前正在尝试在我的 laravel 项目中实现书签功能,并且我正在使用这种设计。 Bookmark 表是 User 和 Post 表的枢纽,多对多关系

  public function BookmarkPost(Request $request,$id)
{
    $book = Auth::guard('api')->user()->bookmarks()->attach($id);

     return response()->json( $book);
}

/**
 * Unfavorite a particular post
 *
 * @param  Post $post
 * @return Response
 */
public function unBookmarkPost(Request $request,$id)
{
    $unbook = Auth::guard('api')->user()->bookmarks()->detach($id);

    return response()->json( $unbook);
}

有BookmarkController的代码

在用户模型中定义关系后,我创建了一个方法来检查帖子是否在我的帖子模型中被收藏

 public function bookmarked()
    {
           return (bool) Bookmark::where('user_id', Auth::guard('web')->id())
                              ->where('job_id', $this->id)
                              ->first();

      }

有 Post 模型的代码。这应该检查帖子是否已被收藏。

所以我还设置了一个 vue 组件,它接收两个 props

<bookmark-icon :id="job.id" :bookmarked="job.bookmarked ? true : false "></bookmark-icon>

所以我现在的主要问题是我使用书签图标作为子组件我将如何在 Vue 实例上调用书签()方法,如果它是刀片,它本来会是

{{$job->bookmarked()}}

我如何使用 Vue 来获得它??

【问题讨论】:

  • 您可以使用computed 属性,例如bookmarked() { return this.job.bookmarked ? true: false }。那么您的财产将是:bookmarked="bookmarked"
  • 你没有在这里得到我的问题,我正在尝试在 vue 中复制这个 {{$job->bookmarked()}} 的内容
  • 你会用{{$job-&gt;bookmarked()}}实现什么?只显示truefalse?有条件地显示书签图标? {{ bookmarked ? 'true' : 'false' }} 如果是前者,v-if="bookmarked"bookmark-icon 组件上如果是后者。您的问题不清楚预期的结果应该是什么。

标签: javascript php laravel model vue.js


【解决方案1】:

你无法在 vuejs 中访问 eloquent 表单。

但是您可以在将数据传递给 vuejs 之前使用关系。

为了做到这一点,你必须急切地加载它 (如果它对您来说是新的,请在文档上阅读它,非常有用的东西,尤其是在性能方面) 你可以阅读这篇文章“Importance of eager loading

您可以这样做,如下面的代码:

public function load_display()
    {

        $job = Job::bookmarked()->get();

        return response()->json($job );

    }

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 2017-11-07
    • 1970-01-01
    • 2020-09-24
    • 2020-04-13
    • 2020-08-28
    • 2021-07-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多