【问题标题】:Laravel5.5: Insert the ID of the created model to create a record in another tableLaravel5.5:插入创建模型的ID,在另一个表中创建记录
【发布时间】:2018-02-25 07:44:43
【问题描述】:

我一直在尝试使用表 A 中已创建记录的 id 创建表 B 的记录。但由于某种原因,即使我已经转储了模型 id 的值并且它是正确的,该字段始终为空.但是当我将它分配给表 B 中的一个字段时,它不会插入它。我没有收到任何错误,并且两条记录都已创建(在表 A 和 B 中),但是应该具有模型 A 的 ID 的字段的值为 NULL。

我已经将该字段添加到模型类中的 $fillable 数组中:

protected $fillable = [
        'name', 'email', 'password', 'phone', 'role', 'A_id', 
    ];

这是我尝试过的代码。请帮我解决这个问题。

if($data['role'] == 'admin'){

            $tableA = TableA::create([
                'name' => $data['name'],
                'phone' =>$data['phone']
            ]);
            return TableB::create([
                'A_id' => $tableA->id,
                'name' => $data['nameB'],
                'email' => $data['email'],
                'role' => $data['role'],
                'phone' => $data['phoneB'],
                'password' => bcrypt($data['password']),
            ]);
        }

这是 TableB 的迁移文件

public function up()
    {
        Schema::create('tableB', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('A_id')->unsigned()->nullable();
            $table->string('phone', 10)->unique();
            $table->string('name');
            $table->string('role');
            $table->integer('address_id')->nullable();
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
        });
    }

【问题讨论】:

    标签: laravel model eloquent


    【解决方案1】:

    A_id 添加到TableB 模型中的$fillable 数组中:

    protected $fillable = ['A_id', ......];
    

    【讨论】:

    • 我已经添加了。然而,我仍然得到相同的结果。这就是我写这个问题的原因。我将编辑问题以指出我已经这样做了。
    • @Alladin 如果你已经添加它并且它仍然是null,请显示TableB 表的迁移文件。
    • 我已经编辑了问题并在表B的迁移文件中添加了Up()函数
    • @Alladin 看起来不错。请把dd($tableA->id); 放在return 子句之前,告诉我它显示了什么?
    • $Alexey 正如我在问题中提到的,我已经转储了 id,这很好..它显示了正确的值。所以我也很困惑
    【解决方案2】:

    在困惑了一段时间之后。我尝试了一种不同的方法来创建模型,出于某种原因,它运行良好。

    if($data['role'] == 'admin'){
    
        $tableA = TableA::create([
            'name' => $data['name'],
            'phone' =>$data['phone']
        ]);
    
        $tableB = new TableB();
        $tableB->A_id = $tableA->id;
        $tableB->name = $data['nameB'];
        $tableB->email = $data['email'];
        $tableB->role = $data['role'];
        $tableB->phone = $data['phoneB'];
        $tableB->password = bcrypt($data['password']);
        $tableB->save();
        return $tableB;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多