2013-07-23 100 views
1

我有一个简单的(我想这很容易)的问题。我创建了一个名为Player.php的新模型。它看起来像这样:Laravel 4模型

<?php 

    class Player extends Eloquent { 


     protected $table = 'players'; 

     protected $fillable = array('char_name', 'sex'); 
     public $timestamps = false; 

} 

而且我已经在我的控制器中使用这样的:

public function post_character() 
{ 
    $input = Input::all(); 

    $rules = array(
     'char_name' => 'required|unique:players,name|min:4', 
     'sex' => 'required' 
    ); 

    $validation = Validator::make($input, $rules); 

    if ($validation->fails()) { 
     return Redirect::to('create_character')->withErrors($validation); 
    } else { 

     $player = new Player; 
     $player->name = $input['char_name']; 
     $player->sex = $input['sex']; 
     $player->save; 

     return Redirect::to('managment')->with('success', 'Your character has been created.'); 
    } 
} 

这是我的形式:

@extends('base') 
@section('main') 

<div class="doc-content-box"> 
    <legend>Create a character</legend> 
    {{ Form::open(array('url' => 'create_character')) }} 

     <div class="control-group"> 
    {{ Form::label('char_name', 'Character name') }} 
    <div class="controls"> 
    {{ Form::text('char_name', null, array('placeholder' => 'Character name goes here..')) }} 
    </div> 
</div> 

    <div class="control-group"> 
     <div class="controls"> 
{{ Form::select('sex', array('1' => 'Male', '2' => 'Female'), '1'); }} 
</div> 
</div> 

<div class="form-actions"> 
    {{ Form::submit('Create a character', array('class' => 'btn btn-success')) }} 
    {{ Form::button('Help', array('class' => 'btn btn-default')) }} 
</div> 
    {{ Form::close() }} 
</div> 

@endsection 

而现在,这是我的错误:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`thefs`.`players`, CONSTRAINT `players_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE) (SQL: insert into `players` (`name`, `sex`) values (?, ?)) (Bindings: array (0 => 'Malx', 1 => '1',)) 

另外这里是我的数据库的屏幕截图表“玩家”:

http://3.imgland.net/lL6EIv.png

回答

1

好吧,错误说你在玩家桌上有一个限制。您在此创建用户:

$player = new User; 
    $player->name = $input['char_name']; 
    $player->sex = $input['sex']; 
    $player->save; 

但是您没有设置account_id。您可以通过默认的phpmyadmin把这个字段设置为NULL或删除外键约束或设置正确的ACCOUNT_ID

顺便说一句,你可以写:

$player = Player::create(array(
    'name' => ... 
)); 

而不是创建新的对象,然后将其保存

+0

我还可以使用:'$球员=新播放器; $ player-> name = $ input ['char_name']; $ player-> sex = $ input ['sex']; $ player-> save;'我不希望它为null,我如何设置正确的account_id?我是一个新手所有这一切,我想你真的很深的解释哈哈 – dinomuharemagic

+0

只是一个建议的话,而不是它是一个强制性的规则,但Laravel的身份验证的东西更好的开箱,如果你使用“用户“作为模型名称,而”用户“作为表格名称时,做帐户的东西(而不是”帐户“例如)。 –

0

你似乎有你的模型,账户和球员之间的关系。你必须在你的控制器中建立这种关系。

0

这很可能是因为您尚未在Eloquent模型中定义用户和玩家之间的关系。这里有一种常见的方法可以做到这一点(请注意,我正在用“用户”替换您的“账户”模型[因此您的账户表将成为用户表,而玩家表将拥有user_id的外键而不是account_id] ,因为它在Laravel的默认身份验证机制中表现得更好)。

//user.php 
class User extends Eloquent { 
    //Define relation to players 
    public function players() { 
     return $this->hasMany('Player'); 
    } 
} 


//player.php 
class Player extends Eloquent { 
    //Your other player model code 

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

现在创建一个新的播放器时:

$player = new Player(); 
$player->user_id = Auth::user()->id; 
$player->name = $input['char_name']; 
$player->sex = $input['sex']; 
$player->save(); 

这是假设用户ID从任何用户登录来

+0

谢谢!你已经清除了我的想法。现在,我需要更多的帮助。 如何显示让我们这样说(在一个表格中): http://1.imgland.net/8jWJcG.png 显示字符名称(数据库中'列'名称'),级别('级别'在数据库中),角色(数据库中的'group_id')。从数据库中提取数据并将其放入表中?以及如何查看它是在线还是离线(数据库中的“在线”)? 还有一个,我怎样才能设置播放器的位置(这是一个游戏),在列(posx,posy,posz)中设置默认数字(并使其像编辑配置)? – dinomuharemagic

+0

您需要通过某种标准对模型进行查找。简单的演示:http://d.chend.me/MoO5这是非常基本的东西。请务必阅读有关检索Eloquent模型的文档。 http://laravel.com/docs/eloquent#introduction –

+0

谢谢,你没有回答我如何设置玩家的位置(这是一款游戏),在列中设置默认数字(posx,posy,posz) (并让它像一个配置来编辑)? – dinomuharemagic