我有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.');
}
我没有错误但是没有创建记录。有帮助吗?非常感谢你。
答案 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_key
和foreign_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()){