我正在尝试在“我的用户”表和“上传”表之间建立一对多的关系。
为此,我做了以下事情:
将此功能添加到我的User
表:
public function uploads(){
return $this->belongsTo('App\Upload');
}
这到我的Upload
表:
public function user(){
return $this->belongsTo('App\User');
}
然后我将这个简单的函数添加到我的UploadController:
public function uploads()
{
$user_id = auth()->user('id');
$user = User::find($user_id);
return view('uploads')->with('uploads',$user->uploads);
}
我的上传视图如下所示:
@extends('layouts.app')
@section('content')
<h1>Uploads</h1>
@if(count($uploads)>0)
@foreach($uploads as $upload)
<div class="well">
<h3><a href="/uploads/{{$upload->id}}">{{$upload->name}}</a> </h3>
<small>Written on {{$upload->created_at}}</small>
</div>
@endforeach
{{$uploads->links()}}
@else
<p>No uploads found</p>
@endif
@endsection
当我尝试转到myproject.dev/uploads
时,我收到以下错误:
此集合实例上不存在属性[uploads]。
由于我是laravel的新手,据我所知,在制作这样的东西之后我不必进行迁移。但它仍然没有工作,我只是不知道我做错了什么?我只是按照文档....
答案 0 :(得分:1)
User
模型的关系存在问题,应该是这样的:
public function uploads(){
return $this->hasMany('App\Upload');
}
然后你必须急于加载上传:
$user = User::with('uploads')->find($user_id);
但在你的情况下,更好的解决方案是加载上传而不是用户,因为你使用分页,所以:
public function uploads()
{
$user_id = auth()->user('id');
$uploads = Upload::whereHas('user', function ($query) use($user_id) {
$query->where('id', $user_id);
})
->paginate(10);
return view('uploads')->with('uploads',$uploads);
}
Ps:您可以在paginate函数中更改10以选择每页所需的元素。
答案 1 :(得分:0)
您需要急切加载User
模型uploads
。为此,只需在您的Eloquent查询中添加:
$user = User::whereId($user_id)->with('uploads')->first();
同样在你的User
模型中,你在雄辩的关系中有错误。您需要说明User
有uploads
,upload
属于User
。
public function uploads()
{
return $this->hasMany(Upload::class)
}