【问题标题】:Laravel. Property does not exist on this collection instance. Relation error拉拉维尔。此集合实例上不存在属性。关系错误
【发布时间】:2023-01-23 22:03:45
【问题描述】:

我尝试在我的数据库中的不同表之间创建关系并从这些表中获取数据,但出现错误:此集合实例上不存在属性。

这是我的代码:

迁移文件:

Schema::table('books', function (Blueprint $table) {
        $table->foreignId('author_id')->constrained('authors')->onUpdate('cascade')->onDelete('cascade');
    });

在模型\作者中:

public function books () {
    return $this->hasMany('App\Models\Books');  
}

在模型\书籍中:

public function author() {
    return $this->belongsTo('App\Models\Authors'); 
}

在作者控制器中:

public function index () {
    
    $authors = Authors::all(); 
    return dd($authors->books); 
     
}

在图书控制器中:

public function index () {
    
    $books = Books::all(); 
    return  dd($books->author); 
    
}

如果有人知道如何解决这个问题,我将不胜感激。

【问题讨论】:

    标签: laravel foreign-keys relationship laravel-9


    【解决方案1】:

    你的模型是正确的,但当你调用 $authors->books 时你错了,因为 $authors 是你的 Authors 模型的集合而不是 Author 的对象。如果你想检查你的关系,你可以用这个例子来做:

    public function index () {
        
        $authors = Authors::latest()->first();; 
        dd($authors->books); 
         
    }
    

    【讨论】:

      【解决方案2】:

      你的作者和书籍之间的关系是一对多的,所以作者hasMany 书籍(就像你在模型关系中正确陈述的那样)。

      它的输出是一个集合,因此您不能以这种方式访问​​它,而是需要像这样循环它:

      public function index () {
          $authors = Authors::all(); 
          $authors->books->each(function ($book) {
            print_r($book);
          }
      }
      

      如果您想检索单个作者的书籍,您可以为作者返回单个模型实例,例如:

      public function index () {
          $author = Authors::where('id',1)->first(); 
          print_r($author->books);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多