首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4模型

Laravel 4模型
EN

Stack Overflow用户
提问于 2013-07-23 14:17:19
回答 3查看 1.6K关注 0票数 1

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

代码语言:javascript
复制
    <?php

    class Player extends Eloquent {


        protected $table = 'players';

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

}

我在我的控制器里用过这个:

代码语言:javascript
复制
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.');
    }
}

这是我的表格:

代码语言:javascript
复制
@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

现在,这是我的错误:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-23 14:37:38

嗯,错误说你有一个约束球员表。在这里您创建了用户:

代码语言:javascript
复制
  $player = new User;
  $player->name = $input['char_name'];
  $player->sex = $input['sex'];
  $player->save;

但你没有设置account_id。默认情况下,您可以在phpmyadmin或delete外键约束或设置正确的account_id中设置此字段为空。

顺便说一句,你可以写:

代码语言:javascript
复制
$player = Player::create(array(
    'name' => ...
));

而不是创建新对象,然后保存它

票数 1
EN

Stack Overflow用户

发布于 2013-07-23 14:37:08

你的模型中似乎有一个账户和玩家之间的关系。你必须在你的控制器中建立这种关系。

票数 0
EN

Stack Overflow用户

发布于 2013-07-23 19:54:59

这很可能是因为您还没有在雄辩的模型中定义用户和玩家之间的关系。这是一种常见的方法(请注意,我正在用"User“替换您的"Account”模型,因此,您的Account表将变成一个User表,而players表将拥有一个user_id的外键,而不是account_id,因为它更适合Laravel的默认auth机制)。

代码语言:javascript
复制
//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');
    }
}

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

代码语言:javascript
复制
$player = new Player();
$player->user_id = Auth::user()->id;
$player->name = $input['char_name'];
$player->sex = $input['sex'];
$player->save();

这假设用户id来自任何登录的用户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17812830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档