【问题标题】:Can't use a saved instance/reference to make an association with another model无法使用保存的实例/参考与另一个模型建立关联
【发布时间】:2014-05-07 18:06:29
【问题描述】:

伙计们,我在 eloquent 和数据库中发生了一些奇怪的事情,我似乎无法找到它。 我在继承层次结构中有 3 个模型 User > Gp1user > Worker,它们之间存在一对一的关系。

这是来自我的控制器的代码

$user = User::find(1);
$gp1user = new Gp1user;
$gp1user->user()->associate($user);
$gp1user->save();

$worker = new Worker;
$worker->gp1user()->associate($gp1user);
$worker->save();

似乎即使$gp1user 已保存,我也无法使用该引用与$worker 建立关联。我得到了错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`careers`.`workers`, CONSTRAINT `workers_gp1user_id_foreign` FOREIGN KEY (`gp1user_id`) REFERENCES `gp1users` (`user_id`)) (SQL: insert into `workers` (`gp1user_id`) values (0)) 

但如果我检查数据库,$gp1user 实例确实存在。所以我只剩下这个选项了。

$user = User::find(1);

$gp1user = new Gp1user;
$gp1user->user()->associate($user);
$gp1user->save();

$worker = new Worker;
$worker->gp1user()->associate(Gp1user::find(9));
$worker->save();

我必须在数据库中找到特定实例并使用id 创建一个新实例。哪个有效,但不是因为我必须先检查数据库中的 id。 为什么 eloquent 不让我使用 $gp1user 参考? 我怀疑它与外键有关,但我找不到任何问题。

这就是我的迁移(在不同文件中)的样子

Schema::create('users', function($table)
    {
        //
        $table->increments('id');
        $table->string('first_name', 128);
        $table->string('second_name', 128);
        $table->string('email');
        $table->string('password', 60);
        $table->timestamps();
    });




Schema::create('gp1users', function($table)
    {

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



    });



Schema::create('workers', function($table)
    {
        $table->integer('gp1user_id')->unsigned();
        $table->foreign('gp1user_id')->references('user_id')->on('gp1users');
        $table->unique('gp1user_id')->primary();



    });

我的模型

class User extends Eloquent {


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

}



class Gp1user extends Eloquent {


protected $primaryKey = 'user_id';
public $timestamps = false;


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

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

}



class Worker extends Eloquent {


protected $primaryKey = 'gp1user_id';
public $timestamps = false;


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

}

提前致谢。

【问题讨论】:

    标签: laravel constraints eloquent belongs-to relationships


    【解决方案1】:

    这应该适合你。不幸的是,我还不确定究竟是为什么。

    $user = User::find(1);
    
    $gp1user = new Gp1user;
    $gp1user->user()->associate($user);
    
    $worker = new Worker();
    $worker->gp1user()->associate($gp1user);
    
    $gp1user->save();
    $worker->save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2018-02-28
      • 2017-06-13
      相关资源
      最近更新 更多