【问题标题】:Laravel Eloquent saving relational model failsLaravel Eloquent 保存关系模型失败
【发布时间】:2016-08-17 05:47:19
【问题描述】:

我有 Laravel Eloquent 课程Collage

class Collage extends Model
{

    /**
     * Get the User that owns this Collage.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

拼贴迁移架构

Schema::create('collages', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->string('name')->nullable();
            $table->timestamps();
        });

User

class User extends Authenticatable
{
    /**
     * Get all Collages that belongs to this User.
     */
    public function collages()
    {
      return $this->hasMany('App\Collage');
    }
}

但是当我在 tinker 上这样做时

$user = App\User::find(1)->first();
$collage = new App\Collage;
$collage->name = 'Collage';
$collage->user = $user;

//and save
$collage->save();

抛出错误QueryException

General error: 1 table collages has no column named user

【问题讨论】:

  • 您想在拼贴中添加新用户吗?
  • 不,我只是想将用户 ID(拥有此拼贴画的人)广告到拼贴画中。
  • 我认为,据我所知,您需要更改关系(我假设您的列):$this->hasMany('App\User', 'user_id', 'id');return $this->hasMany('App\Collage','id','user_id');

标签: php laravel eloquent relational-database


【解决方案1】:

改变

$collage->user = $user

收件人

$collage->user_id = $user->id

【讨论】:

    【解决方案2】:

    更新您的架构以建立关系,

    Schema::create('collages', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('name')->nullable();
        $table->timestamps();
    });
    

    这样 Laravel Eloquent 会自动引用关系。

    【讨论】:

    • 是的,我已经添加了这一行,但还是一样,我使用的是 sqlite,可能是 sqlite 导致的?
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2021-10-01
    • 2018-10-20
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多