1

Laravelで問題が発生したことはありませんが、本当に奇妙なことに遭遇しました。

one to oneユーザーのメタデータを別のテーブルに保存する関係があります。

私のコントローラーの更新は次のようになります

$val = Validator::make(Input::all(), $rules);

        if($val->passes())
        {
            $this->cur_user->username             = Input::get('username');
            $this->cur_user->metadata->first_name = Input::get('first_name');
            $this->cur_user->metadata->last_name  = Input::get('last_name');
            $this->cur_user->metadata->gender     = Input::get('gender');
            $this->cur_user->metadata->location   = Input::get('location');
            $this->cur_user->email                = Input::get('email');
            $this->cur_user->metadata->dob        = Input::get('dob');
            $this->cur_user->metadata->about      = Input::get('about');

            if ($this->cur_user->save() && $this->cur_user->metadata->save()) 
            {
               $data = array('msg' => 'success');
            }

関係

ユーザーモデル

class User extends Eloquent implements UserInterface, RemindableInterface {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password');

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }


    public function metadata()
    {
        return $this->hasOne('metadata');
    }


}

メタデータ モデル

class Metadata extends Eloquent {

    public $timestamps = false;

    protected $table = "users_metadata";

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

this->cur_user->metadata->gender = Input::get('gender');$をそのままに$this->cur_user->metadata->about = Input::get('about');して、検証で次のエラーが表示されると、本当に奇妙なことです。

{"error":{"type":"Exception","message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: update `users_metadata` set `gender` = ?, `about` = ? where `id` is null) (Bindings: array (\n  0 => '1',\n  1 => 'testing one 2 3',\n))","file":"C:\\BitNami\\apache2\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php","line":555}}

コメントアウトすると、すべて正常に機能し、すべてをチェックして、奇妙なことは見られません。

誰かヒントをくれませんか?(検索するといくつかの答えが見つかりましたが、実際には私の問題ではありません)

4

1 に答える 1

2

user_metadataテーブルにはテーブルへの外部キーが含まれていないようです。usersこれは、ユーザーとそのメタデータを接続できるようにするために必要です。また、列の名前は と予想されるようidです。

データベース構造を投稿していただけると助かります。さらに良いのは、移行ファイルです。ただし、提案を試みることができます。

テーブルに自動インクリメントid列がある場合、移行ファイルには次のようなものが含まれる可能性があります。usersuser_metadata

$table->integer('user_id')->unsigned();
$table->primary('user_id');
$table->foreign('user_id')
    ->references('id')->on('users')
    ->onDelete('cascade');

おそらく、セットアップの一部が欠けているのではないでしょうか?

つまり、は、 を反映する識別外部キーuser_metadata.user_idである必要があります。また、ユーザーが削除されると、そのメタデータも自動的に削除されます (たとえば、外部キー関係をサポートしない MyISAM を使用している場合を除く)。users.id

Laravel/Eloquent 外部キーの詳細については、マニュアルも参照してください: http://four.laravel.com/docs/schema#foreign-keys

于 2013-08-08T11:10:50.003 に答える