我试图理解雄辩的ORM。 我创建了一个基本的帖子博客。
我想在帖子中添加帖子类型,每个帖子应该只有一种类型。
发布类型: 新闻发布 视频发布 博客文章
数据库结构:
表:档案
id
title
content
created_at
updated_at
excerpt
deleted_at
status
表:类型
id
name
created_at
updated_at
表:archive_type
id
archive_id
type_id
created_at
updated_at
型号:
型号:存档
class Archive extends Eloquent
{
protected $fillable = array('title', 'content', 'excerpt');
public function type()
{
return $this->belongsToMany('Type');
}
}
型号:输入
class Type extends Eloquent
{
protected $fillable = array('name');
}
这在运行时有效:
Archive::with(array('type'))->orderBy('id', 'DESC')->get();
但它返回一个集合,我认为这是错误的,因为它只应该返回一个结果。
我遇到的另一个问题是如何在archive_type
数据库中为新帖添加新行。
感谢任何帮助。
答案 0 :(得分:2)
无论结果是零还是一百万,都会返回一个集合。此规则的唯一例外是“查找”方法,它们用作主键查找方法,在这种情况下,只能有零个或一个结果,因此它将返回它找到的模型而不是一个集合。您在查找时遇到的行为符合预期。
如果您想要退回第一个模型,可以在->first()
之后放置->get()
。
创建新的存档类型公司。你应该做的关系:
//获取我们的存档并输入模型
$ archive = Archive :: with(array('type')) - > orderBy('id','DESC') - > get() - > first();
$ type = Type :: where('name','=','video') - > get() - > first();
//附上他们!
$ archive->类型() - >附加($型);
编辑:如何在刀片模板中显示。
要将集合(或任何相关数据)传递到视图,请在控制器中执行此操作:
return View::make('yourview')->with('archives', $archives);
要在刀片模板中循环使用@foreach
@foreach ($archives as $archive)
<p>This is archive id is {{ $archive->id }}</p>
@endforeach
否则,如果您只通过一个模型而不是集合,则可以执行
<p>This is archive id is {{ $archive->id }}</p>
如果您要问“我如何在视图中显示集合中的第一个模型”,那么简单的答案是,首先从模型中取出模型然后将其传递给您的视图,其他任何需要“业务逻辑“在您看来。