【问题标题】:Laravel 4 Create post type relationshipLaravel 4 创建帖子类型关系
【发布时间】:2014-07-25 06:42:40
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

    标签: php orm laravel laravel-4 eloquent


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

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

    2. 创建一个新的存档类型 inc。你应该做的关系:

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

      // 附上它们!
      $archive->type()->attach($type);

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

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

    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>
    

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

    【讨论】:

    • 好吧,我明白了。最后一个问题是,如果一个集合返回一个包含一个项目的对象。如何访问刀片模板中返回的一项?非常感谢您的回复。
    • 非常感谢。帮了大忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2014-10-18
    相关资源
    最近更新 更多