Laravel中的评论/发布系统

时间:2014-09-04 15:11:36

标签: laravel laravel-4 eloquent foreign-key-relationship

我似乎无法在与Laravel的脑海中找到具体的关系。试图按照雄辩的方式跟踪文档,我仍然无法将我的外键变为意味着某些东西(我手动更新)。现在我正试图让公告板系统工作。用户可以创建一个公告帖,这里它在我的控制器中工作:

public function editPost($id)
{
    $user = User::find($id);
    $user->bulletin = new Bulletin;//new post
    $user->bulletin->creator_id = $id;//why doesn't it automatically update given the relationship?
    $user->bulletin->type = Input::get('type');
    $user->bulletin->title = Input::get('title');
    $user->bulletin->content = Input::get('bulletinEdit');
    $user->bulletin->save();

    if(Input::hasFile('bulletinImage')){
        $extension = Input::file('bulletinImage')->getClientOriginalExtension();
        $fileName = str_random(9).'.'.$extension;

        $user->bulletin->photo = new Photo;
        $user->bulletin->photo->user_id = $id;
        $user->bulletin->photo->type = Input::get('type');
        $user->bulletin->photo->filename = $fileName;
        $user->bulletin->photo->touch();
        $user->bulletin->photo->save();

        Input::file('bulletinImage')->move('public/images/bulletin/',$fileName);
    }

    return Redirect::to('bulletin');
}

如果我正确设置了关系,那么creator_id不应该自动更新吗?以下是我在模特中的内容:

公告

<?php

class Bulletin extends Eloquent {

public function creator()
{
    return $this->belongsTo('User');
}

public function comments()
{
    return $this->hasMany('Comment');
}

public function type()
{
    //if 1 then, etc
}

public function photos(){
    return $this->hasMany('Photo');
}
}

用户

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');

    public function tags()
    {   
        //TO REMOVE RECORD
        //User::find(1)->tags()->detach();

        return $this->belongsToMany('Tag'); 
    }

    public function createUser()
    {
        $password = Hash::make('secret');
    }

    public function bulletin()
    {
        return $this->hasMany('Bulletin','creator_id');
    }

    public function profile()
    {
        return $this->hasOne('Profile');
    }
}

有人可以给我一些关于收紧这个的提示吗?

1 个答案:

答案 0 :(得分:1)

你这样做的方式应该有效,你只是使用更多的代码,而Eloquent有一些方法可以帮助你建立关系,所以我会尝试这样的事情:

public function editPost($id)
{
    $user = User::find($id);

    // Create a new bulletin, passing the necesssary data

    $bulletin = new Bulletin(Input::only(['type', 'title', 'bulletinEdit']));

    // Attach the bulletin model to your user, Laravel should set the creator_id itself

    $bulletin = $user->bulletin()->save($bulletin);

    ...

    return Redirect::to('bulletin');
}

在您的模型中,您必须:

class User extends Eloquent implements UserInterface, RemindableInterface {

   protected $fillable = ['type', 'title', 'bulletinEdit'];

   ...
}

所以Laravel没有给你一个MassAssignmentException。

相关问题