You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何按给定结构将两个字段分别存入两张不同的关联表

问题根源

  1. 你的控制器store方法仅执行了table1对应模型EnviarCurriculum的写入操作,完全没有调用table2对应模型EnviarCurriculumPreguntas的写入逻辑,自然第二个表不会有数据。
  2. 模型关联定义错误:如果table1是主表、table2是关联从表,EnviarCurriculum对应的关联方法应该用hasOne而非belongsTo,且你没有手动指定自定义的主键、外键字段,Laravel默认会按模型名_id的规则找关联字段,和你自定义的ID_tableX格式不匹配。
  3. 代码中直接调用$request->validated()但没有定义请求验证规则,实际运行中该方法会返回空或者抛出异常,你没有看到报错大概率是简化代码时漏掉了验证逻辑。

修改步骤

1. 修正模型关联

修改EnviarCurriculum.php的关联方法,注意替换下方的table1_foreign为你table2中实际存储的、关联table1主键ID_table1的外键字段名:

namespace App;

use Illuminate\Database\Eloquent\Model;

class EnviarCurriculum extends Model
{
    protected $table = 'table1';
    protected $primaryKey = 'ID_table1';
    protected $fillable = [
        'nif'
    ];

    public function enviarcurriculumpreguntas()
    {
        // 第一个参数为关联模型,第二个为从表外键,第三个为主表主键
        return $this->hasOne(EnviarCurriculumPreguntas::class, 'table1_foreign', 'ID_table1');
    }
}

同时在EnviarCurriculumPreguntas.php中补充关联反向定义,且把外键字段加入fillable:

namespace App;

use Illuminate\Database\Eloquent\Model;

class EnviarCurriculumPreguntas extends Model
{
    protected $table = 'table2';
    protected $primaryKey = 'ID_table2';
    protected $fillable = [
        'nif_table2',
        'table1_foreign' // 这里加你实际的外键字段名
    ];

    public function enviarcurriculum()
    {
        return $this->belongsTo(EnviarCurriculum::class, 'table1_foreign', 'ID_table1');
    }
}

2. 修改控制器存储逻辑

修改EnviarCurriculumController.php的store方法,补充验证逻辑和从表写入操作:

public function store(Request $request)
{
    // 补充请求验证规则
    $validated = $request->validate([
        'nif' => 'required|string|max:255',
        'nif_table2' => 'required|string|max:255',
    ]);

    // 写入主表table1
    $curriculum = EnviarCurriculum::create($validated);

    // 通过关联写入从表table2
    $curriculum->enviarcurriculumpreguntas()->create([
        'nif_table2' => $validated['nif_table2']
    ]);

    // 后续可以加跳转或者返回响应逻辑
    return redirect()->back()->with('success', '提交成功');
}

3. 数据库校验

确认table2表中已经创建了对应关联table1主键ID_table1的外键字段,字段名和你上面代码中填的table1_foreign保持一致。

内容的提问来源于stack exchange,提问作者El conde Lucanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:06:02