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

How to fetch data with relationship using VueJs + Laravel

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

我的用户和 post 的 table 设置了关系。一个用户有很多个post,一个post属于一个用户

在我的 Posts.vue 模板中,我现在可以显示 post table 数据:

<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);
 }

因为我在 post 的 table 中有 user_id, 如何使用 vuejs 在 table 中显示用户名?

所以我从 Laravel 文档中发现我可以像这样在我的控制器中传递 "with" 函数:

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

这给了我 posts 和那个 post 的用户数据,这让我可以像这样访问:

{{ post.user.name }}

感谢您记录这一点,它确实有帮助。

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

不工作: 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;
}

工作: Laravel

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;
}

用法:VueJs

... <span v-text="search.doctor.specialty"></span>

访问 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>