【问题标题】:Laravel HasMany relationship Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$idLaravel HasMany 关系未定义属性:Illuminate\Database\Eloquent\Relations\HasMany::$id
【发布时间】:2019-08-12 01:12:14
【问题描述】:

我在读取具有关系的数据时遇到问题。它如何返回未定义的属性: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


【解决方案1】:

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

试试这个,

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

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

【讨论】:

    【解决方案2】:

    在执行循环后,您在 $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
    

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2020-05-04
      • 2021-06-07
      • 2020-01-26
      • 2021-09-23
      • 2019-11-16
      • 2018-11-22
      • 1970-01-01
      • 2020-07-08
      相关资源
      最近更新 更多