Laravel 4创建帖子类型关系

时间:2014-06-04 14:36:54

标签: php orm laravel laravel-4 eloquent

我试图理解雄辩的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数据库中为新帖添加新行。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  1. 无论结果是零还是一百万,都会返回一个集合。此规则的唯一例外是“查找”方法,它们用作主键查找方法,在这种情况下,只能有零个或一个结果,因此它将返回它找到的模型而不是一个集合。您在查找时遇到的行为符合预期。

    如果您想要退回第一个模型,可以在->first()之后放置->get()

  2. 创建新的存档类型公司。你应该做的关系:

    //获取我们的存档并输入模型
     $ archive = Archive :: with(array('type')) - > orderBy('id','DESC') - > get() - > first();
     $ type = Type :: where('name','=','video') - > get() - > first();

    //附上他们!
     $ archive->类型() - >附加($型);

  3. 编辑:如何在刀片模板中显示。

    要将集合(或任何相关数据)传递到视图,请在控制器中执行此操作:

    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>
    

    如果您要问“我如何在视图中显示集合中的第一个模型”,那么简单的答案是,首先从模型中取出模型然后将其传递给您的视图,其他任何需要“业务逻辑“在您看来。