Laravel 5.5中的一对多关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.5中的一对多关系相关的知识,希望对你有一定的参考价值。
我在Laravel 5.5中遇到了一对多的关系。
我有两个表,一个用于博客帖子,一个用于作者。 posts表有一个author_id列,并且每个博客帖子都填充了有效的作者ID。 author_id被定义为posts表迁移中的外键。
当我加载使用查询的视图时,作者为null,因为author_id未包含在生成的查询中。
发布模型:
public function author(): BelongsTo
{
return $this->belongsTo(Author::class);
}
我也尝试明确列出具有相同结果的键:
return $this->belongsTo(Author::class, 'author_id', 'id');
发布存储库:
public function getPostBySlug(string $slug)
{
return $this->model
->select(
'posts.title',
'posts.contents',
'posts.published_at'
)
->with(['author:first_name,last_name,slug'])
->where('posts.slug', '=', $slug)
->whereNotNull('posts.published_at')
->first();
}
生成的查询:
select `first_name`, `last_name`, `slug`
from `authors` where `authors`.`id` in ('')
and `authors`.`deleted_at` is null
答案
你没有选择posts.author_id
所以如果没有author_id
无法建立关系,可以选择*
或排除select
语句或在select语句中包含posts.author_id
,例如:
$this->model
->select(
'posts.author_id',
'posts.title',
'posts.contents',
'posts.published_at'
)
// rest of the code ...
foreign key (posts.author_id)
必须与authors
建立关系。
另一答案
试试这个
$users = DB::table('posts')
->leftJoin('authors', 'authors.id', '=', 'posts.user_id')
->select('posts.author_id','posts.title','posts.contents','posts.published_at',
'authors.first_name','authors.last_name','authors.slug')
->where('posts.slug', '=', $slug)
->whereNotNull('posts.published_at')
->first();
另一答案
以下列方式托盘关系:
return $this->belongsTo('namespaceauthor');
或逆转方式
return $this->hasMany('namespaceauthor');
以上是关于Laravel 5.5中的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章
无法删除一对多关系中的记录 laravel eloquent