我在laravel中混合了一点查询。
我有一份文章清单。我想从本文作者那里获得数据。
关系模型文章
public function author()
{
return $this->belongsTo('App\Models\Author');
}
关系模型作者
public function articles()
{
return $this->hasMany('App\Models\Article');
}
我试试这个$author = Author::with('articles')->first();
这个:
$author = Author::whereHas('articles', function ($query){
$query->where('id', '1');
});
还有很多人测试过,但我并不了解所有。
我的控制器中的方法:
protected function index()
{
$articles = Article::published()->paginate(8);
return view('pages.blog', [
'articles' => $articles,
]);
}
最重要的是,如何在我的foreach中显示正确的信息?
谢谢!
答案 0 :(得分:0)
要解决此问题,您必须按以下方式定义关系。
文章类定义,基于以下表格结构:
articles {
id : integer [primary key],
...,
author_id : integer [foreign key]
}
class Article extends Illuminate\Database\Eloquent\Model {
protected $table = "articles";
// HERE YOUR CLASS CODE
public function author() {
return $this->belongsTo("Author", "author_id", "id");
}
}
作者类定义,基于以下表结构:
authors {
id : integer [primary key],
...
}
class Author extends Illuminate\Database\Eloquent\Model {
protected $table = "authors";
// HERE YOUR CLASS CODE
public function articles() {
return $this->hasMany("Article", "author_id", "id");
}
}
使用方法belongsTo
和hasMany
时,最好指明外部密钥和本地密钥的标签。
要在视图中显示信息,您必须遵循以下示例:
@foreach ($articles as $article)
<p>Id {{ $article->id }}</p>
...
@endforeach
了解更多信息:
https://laravel.com/docs/5.4/eloquent-relationships
https://laravel.com/docs/5.4/blade