2013-07-23 98 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