如何使用VueJs + Laravel获取关系数据

时间:2018-04-19 21:33:15

标签: vuejs2 laravel-5.6

如何使用vuejs在表格中显示用户名?

我的用户和帖子表设置了关系。用户有很多帖子,帖子属于用户。

在我的Posts.vue模板中,我现在可以显示帖子表数据:

<tr v-for="post in posts">
    <td>{{ post.id }}</td>
    <td>{{ post.title }}</td>
    <td>{{ post.body | snippet }}</td>
</tr>

脚本如下所示:

<script>
    export default {
        data(){
            return{
                posts: []
            }
        },

        methods: {
            showPosts(){
                axios.get('/app/posts').then(response => {
                    this.posts = response.data.posts;
                });
            }
        },
       mounted(){
            this.showPosts();
       }
    }
</script>

我的PostController在索引函数

中看起来像这样
 public function index()
 {
    //
    $posts = Post::all();
    return response()->json([
        'posts' => $posts,
    ], 200);
 }

由于我在posts表中有user_id, 如何使用vuejs在表格中显示用户名?

3 个答案:

答案 0 :(得分:6)

所以我从Laravel文件中发现,我可以通过&#34;&#34;我的控制器中的功能如下:

$posts = Post::with('user')->get();

它为我提供了该帖子的帖子和用户数据,这使我能够像这样访问:

{{ post.user.name }}

答案 1 :(得分:1)

要访问VUE组件中的laravel关系,Laravel Eager loading效果很好。使用 with()方法。例如,

public function recent_orders() {

     $orders = Order::with('service')->where('user_id', Auth::User()->id)->get();

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

现在可以访问我们可以编写的关系了,

<p>{{ order.service.name }}</p>

答案 2 :(得分:0)

感谢您对此进行记录,对您有帮助。

我正在laravel中进行关系链接,尚未使用api进行准备,但是使用predictpy.heroku.com方法,在我的vuejs代码中引用关系数据是一件轻而易举的事。

不起作用: Laravel

with()

工作:Laravel

public function index()
{
  if (request()->q){
    $search = request()->q;

    $searches =  User::whereHas('doctor') 
      ->where(function ($query) use ($search){
        $query->where('name', 'like', "%$search%")
              ->orWhere('email', 'like', "%$search%");
      })->paginate(5);
  }

  return $searches;
}

用法: VueJs

public function index() { if (request()->q){ $search = request()->q; $searches = User::with('doctor')->whereHas('doctor') ->where(function ($query) use ($search){ $query->where('name', 'like', "%$search%") ->orWhere('email', 'like', "%$search%"); })->paginate(5); } return $searches; }