Laravel.属性在此集合实例上不存在.错误的关系



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

这是我的代码:

迁移文件:

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

在模型作者:

public function books () {
return $this->hasMany('AppModelsBooks');  
}

在模型书:

public function author() {
return $this->belongsTo('AppModelsAuthors'); 
}

在AuthorsController:

public function index () {

$authors = Authors::all(); 
return dd($authors->books); 

}

在BooksController:

public function index () {

$books = Books::all(); 
return  dd($books->author); 

}

如果有人有办法解决这个问题,我将非常感激。

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

public function index () {

$authors = Authors::latest()->first();; 
dd($authors->books); 

}

如果你想让所有的作者都有他们的书,使用急切加载with()

public function index () {

$authors = Authors::with('books')->get(); 
return dd($authors); 

}

如果您想要所有带有各自作者的书

public function index () {

$books = Books::with('author')->get(); 
return  dd($books); 

}

当您迭代刀片中的集合(如数组)时,您可以访问关系

@foreach($books as $book)
<span>{{$book->author->name}}</span>
@endforeach

如果你只想获得一个作者的书籍列表,你可以这样做

public function index () {

$authors = Authors::all();
// $authors is a collection of models (think of it as an advanced array)
// To get one of the models, you can iterate them with a loop or, for example, take the first one with "->first()"
//$authors->first() is an instance of the model "Author" class
return dd($authors->first()->books); 
// $authors->first()->books is now a collection of models of "Book" class
}

您的Author和books之间的关系是一对多的,因此AuthorhasManybooks(就像您在模型关系中正确声明的那样)

this的输出是一个集合,所以你不能以这种方式访问它,而是需要像这样循环:

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

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

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

谢谢大家!在我的例子中,正确的解决方案是:

在模型:

public function author() { return $this->belongsTo('AppModelsAuthors', 'author_id'); } 

And in controller:

$books = Books::with('author')->get();

在视图文件中我添加了:

@foreach
<li>{{ $book->title}}</li>                    
<li>{{ $book->author->name}}</li>
@endforeach

再次感谢你。主题可以关闭)))))

相关内容

  • 没有找到相关文章

最新更新