用3个关系保存数据雄辩

时间:2016-09-15 08:15:47

标签: mysql laravel eloquent laravel-5.2

我正试图以雄辩的关系保存数据。

我有以下三个表:用户表,类别表和帖子表。

发布表

Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->string('heading');
        $table->timestamps();

        $table->foreign('category_id')->references('id')->on('categories');
        $table->foreign('user_id')->references('id')->on('users');
});

关系:

类别:

public function posts() {
    return $this->hasMany('App\Post');
}

发表:

public function user() {
    return $this->belongsTo('App\User');
}

public function category() {
    return $this->belongsTo('App\Category');
}

用户:

public function posts($category) {
    return $this->hasMany('App\Post');
}

我的问题是,如何通过在创建功能中传递标题来保存帖子。我想用这种关系。作为一个例子,我想使用这种代码:

$data = ['heading' => $heading];
$user->posts()->category()->create($data);

可以做这种事吗?

或任何其他简单的方法来实现这一目标。

修改

我需要通过使用这种关系创建帖子。

根据流程:

  • 用户将填写表格,我将从中获取数据 类别ID。

  • 现在我需要为该用户创建与给定类别ID相关的数据。

1 个答案:

答案 0 :(得分:1)

这是因为在您调用posts()方法后,您无法访问模型的关系(仅限查询构建器),因此您将无法访问category()关系方法。这是因为posts一对多关系,而您并不知道您所指的创建数据的记录。

修改 如果您想创建新的post条目,那么最好的方法是:

$data = ['heading' => $heading, 'category_id' => $putHereCategoryId];
$user->posts()->create($data);

您需要以某种方式获取新帖子条目的欲望类别的ID。