【问题标题】:Laravel insert to 3 related tablesLaravel 插入 3 个相关表
【发布时间】:2015-08-09 05:26:44
【问题描述】:

大家好,我想知道你们中是否有人尝试使用 3 个相关表将记录插入到 laravel 中的表中?示例

// Database Schema for Pharmacy
Schema::create('pharmacies', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->text('address');
});

// Relationship in App\Pharmacy table
public function pharmacists() {
    return $this->hasMany('App\Pharmacist');

}

现在我有另一张桌子

Schema::create('pharmacists', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('pharmacy_id')->unsigned()->index();
        $table->foreign('pharmacy_id')->references('id')->on('pharmacies')->onDelete('cascade');
        $table->string('fname');
});

// And this is the relationship in App\Pharmacist class
public function account() {
    return $this->hasOne('App\Account');
}

public function pharmacy() {
    return $this->belongsTo('App\Pharmacy');
}

现在是第三张桌子

// This contain the foreign key for pharmacist_id
Schema::create('accounts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('pharmacist_id')->unsigned()->index();
        $table->foreign('pharmacist_id')->references('id')->on('pharmacists')->onDelete('cascade');
        $table->string('username')->unique();
});

// This is the relationship in App\Account class
public function pharmacists() {
    return $this->belongsTo('App\Pharmacist');
}

现在我尝试在 AccountsController 下使用此代码保存它

$input = Request::all();

    $pharmacy = Pharmacy::create([
                    "name" => "Wendies Chicken",
                    "address" => "My Address",                        
                ]);

    $pharmacists = new Pharmacist([
        "fname" => "Administrator",            
    ]);

    $account = new Account([
        "username" => "root",            
    ]);

    $pharmacists->account()->save($account);
    $pharmacy->pharmacists()->save($pharmacists);

但我收到一个错误提示

Integrity constraint violation: 1048 Column 'pharmacist_id' cannot be null (SQL: insert into `accounts` (`username`, `pharmacist_id`, `updated_at`, `created_at`) values (root, 2015-08-09 05:13:31, 2015-08-09 05:13:31))

不知道如何保存,这只是一种保存。我想将记录保存在 3 个相关表中。有人可以帮我弄这个吗。谢谢

【问题讨论】:

    标签: php mysql laravel laravel-5


    【解决方案1】:

    当你执行这段代码时

    $pharmacists->account()->save($account);
    $pharmacy->pharmacists()->save($pharmacists);
    

    pharmacy_id 实际上没有数据,所以这就是问题所在。因此,您应该更改 pharmacy_id 的架构并将其值设置为 default 0

    $pharmacy = Pharmacy::create([
                    "name" => "Wendies Chicken",
                    "address" => "My Address",                        
                ]);
    
    $pharmacy->pharmacists()->save([
        "fname" => "Administrator",            
    ]);
    
    $pharmacy->pharmacists()->account()->save([
        "username" => "root",            
    ]);
    

    【讨论】:

    • 这解决了问题非常感谢,虽然我这样做了 $pharmacy->pharmacists()->save($pharmacists)->account()->save($account);它似乎也有效。谢谢你
    【解决方案2】:

    试试这个

    $input = Request::all();
    
    $pharmacy = Pharmacy::create([
        "name"              => "Wendies Chicken",
        "address"           => "My Address",                        
    ]);
    
    $pharmacists = Pharmacist::create([
        "pharmacy_id"       => $pharmacy->id,
        "fname"             => "Administrator",
    ]);
    
    $account = Account::create([
        "pharmacist_id"     => $pharmacists->id
        "username"          => "root",            
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多