Laravel中的表关系

时间:2014-03-19 23:51:53

标签: php mysql laravel

我有2个表,'用户'和'事件'。 “用户”中的列是“用户名”,“电子邮件”和“密码”。 'events'中的列是'event','date','user_id'和'description'。 我希望用户可以使用表单注册活动。 我在'event'类中有这个代码(模型'Event'):

class Event extends Eloquent {

  protected $fillable = array(
    'event_id',
    'event', 
    'date', 
    'user_id', 
    'description'
  );

  protected $table = 'events';

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

}

和我的'用户'类(模型'用户'):

class User extends Eloquent implements UserInterface, RemindableInterface {

  protected $fillable = array(
    'user_id',
    'username', 
    'email', 
    'password'
  );

  protected $table = 'users';


  public function event()
  {
    return $this->hasMany('Event', 'user_id');
  }

}

我的控制器是:

public function postCreateEvent($userId)
{
  $validator = Validator::make(Input::all(), 
    array(
      'event'       => 'required|alpha_num',
      'date'        => 'required|date',
      'user_id'     => 'required|num',
      'description' => 'required|alpha_num'
    )
  );

  if($validator->fails()) {
    return Redirect::route('users_profile')
      ->with('global', 'Write your data correctly.')
      ->withErrors($validator)->withInput();
  } else {
    $event       = Input::get('event');
    $date        = Input::get('date');
    $user_id     = Input::get('user_id');
    $description = Input::get('description');

    $user = User::find($userId);

    $event              = new Event;
    $event->event       = $event;
    $event->date        = $date;
    $event->user_id     = $user_id;
    $event->description = $description;
    $event->user()->associate($user);

  if($event->save()) {
    return Redirect::route('users_profile')
      ->with('global', 'Thanks for registering your event.');
  }
}
  return Redirect::route('users_profile')
    ->with('global', 'Try again.');

}

我没有错误但是没有创建记录。有帮助吗?非常感谢你。

2 个答案:

答案 0 :(得分:0)

您还应该提及密钥,因为您没有使用Laravel默认需要的约定:

// Event Model
public function user()
{
    //return $this->belongsTo('User', 'local_key', 'foreign_key');
    return $this->belongsTo('User', 'user_id', 'user_id');
}

同样适用于User模型,它应该是:

// User Model
// foreign_key = the key in the child table (user_id)
// local_key = the primary key in User table
return $this->hasMany('Comment', 'foreign_key', 'local_key');

但是...

这些在您的情况下不起作用,因为您在User表中使用了local_keyforeign_key的相同名称,因此请尝试将主键更改为id而不是{{1在user_id表中,并将users更改为event_id作为主键,以便您的关系正常工作。

尝试以下列结构:

id

users

id (Primary key)| username | other fields...

events

答案 1 :(得分:0)

你搞砸了你的$ event变量 首先,您要设置$event=Input::get('event');
然后将其重置为$event = new Event;
在您设置$event->event=$event之后。

试试这个:

 $inputEvent       = Input::get('event');
$date        = Input::get('date');
$user_id     = Input::get('user_id');
$description = Input::get('description');

$user = User::find($userId);

$event              = new Event;
$event->event       = $inputEvent;
$event->date        = $date;
$event->user_id     = $user_id;
$event->description = $description;
$event->user()->associate($user);

if($ event-> save()){