我有一个关系读出数据的问题。一些如何返回Undefined属性:Illuminate \ Database \ Eloquent \ Relations \ HasMany :: $ id。我不知道自从我刚刚开始使用laravel以来我做错了什么。
模型1项目:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
protected $table = "project";
public function projectitem()
{
return $this->hasMany('App\Projectitem');
}
}
模型2项目:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Projectitem extends Model
{
protected $table = "project_item";
function project(){
return $this->belongsTo('App\Project');
}
}
的index.php
@foreach ($projects as $project)
<tr>
<td>{{$project->projectitem()->id}}</td>
<td></td>
</tr>
@endforeach
我不知道为什么会发生这种情况,我尝试了几种解决方案,但似乎都没有。
任何帮助,将不胜感激
看看关系 - 它有很多关系。意思是,在项目上有很多项目项目。
试试这个,
@foreach ($projects as $project)
@foreach ($project->projectitem as $projectitem)
echo $projectitem->id
@endforeach
@endforeach
注意:仅当关系为hasMany时,才需要此内循环。如果它是hasOne,则无需更改循环中的任何内容,只需将关系更改为hasOne并运行即可。
在执行循环之后,在$projects
中有项目对象的集合,根据循环的状态将每个项目作为$project
。当你调用projectitem
它将返回ProjectItem
的集合而不是单个ProjectItem
,这就是为什么$id
未定义的原因。您应该形成另一个循环来分别获取每个ProjectItem
@foreach ($projects as $project)
// $project->projectitem() return a collection of projectitem
// and not a single projectitem
// to access ID of each projectitem you must perform another loop
@foreach ($project->projectitem() as $projectitem)
// here project id is disponible as property accessible like this
{{ $projectitem->id }}
@endforeach
@endforeach