我从一个从表中返回项目数据的基本查询开始:
$project = Project::find($id);
return view('project.show')->with('project', $project);
然后在我的页面上dd()
' $project->id
并且它有效。
我现在还有一个名为user的表。
项目属于用户,因此我在模型中设置了关系:
public function user()
{
return $this->belongsTo('App\User');
}
然后我做了:
$project = Project::with('user')->where('id', $id)->get();
但我收到错误:
未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ id
如果我只是dd()
$project
:
Collection {#200 ▼
#items: array:1 [▼
0 => Project {#196 ▼
#fillable: array:1 [▶]
#dates: array:2 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:5 [▶]
#original: array:5 [▶]
#relations: array:1 [▶]
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
]
}
我做错了什么?
为了澄清,我希望能够做到:
$project->id
$project->user->name
答案 0 :(得分:1)
get()
方法将始终返回Illuminate\Database\Eloquent\Collection
个对象。这意味着您的$project
变量为Collection
,因此当您尝试$project->id
时,您尝试访问id
上的Collection
属性,它不存在。这就是你得到错误的原因。
有几种不同的方法可以达到你想要做的事情。它们显示在下面的代码中。它们几乎都是等价的。
// This is your code, just added the call to first() on the Collection
// to get the first item in the Collection
$project = Project::with('user')->where('id', $id)->get()->first();
// This is a little more efficient. It is calling first() on the QueryBuilder.
// This will directly return the desired object, without having to create
// an intermediate Collection.
$project = Project::with('user')->where('id', $id)->first();
// This is equivalent to the previous statement, just a little cleaner.
// find() is just a shortcut for where('id', $id)->first().
$project = Project::with('user')->find($id);
以上所有三个陈述都会为您提供Project
对象,然后您可以根据自己的喜好使用该对象:
$project = Project::with('user')->find($id);
// print the id
echo $project->id.PHP_EOL;
// if the user exists, print the name
if ($project->user) {
echo $project->user->name.PHP_EOL;
}
答案 1 :(得分:0)
尝试类似
的内容$project = Project::with('user')->find($id);
答案 2 :(得分:0)
我会这样做:
控制器:
Project::where('id', $id)->get();
模型
public function user(){
return $this->belongsTo(User::class);
}
查看
@foreach($project as $i)
{{ $i->user->user_id }}