Laravel HasMany relationship未定义属性:Illuminate \ Database \ Eloquent \ Relations \ HasMany :: $ id

问题描述 投票:0回答:2

我有一个关系读出数据的问题。一些如何返回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

我不知道为什么会发生这种情况,我尝试了几种解决方案,但似乎都没有。

任何帮助,将不胜感激

php laravel
2个回答
1
投票

看看关系 - 它有很多关系。意思是,在项目上有很多项目项目。

试试这个,

 @foreach ($projects as $project) 
    @foreach ($project->projectitem as $projectitem)
       echo $projectitem->id
    @endforeach
 @endforeach

注意:仅当关系为hasMany时,才需要此内循环。如果它是hasOne,则无需更改循环中的任何内容,只需将关系更改为hasOne并运行即可。


1
投票

在执行循环之后,在$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
© www.soinside.com 2019 - 2024. All rights reserved.