当前位置: 首页 > 知识库问答 >
问题:

HasOne create未更新外部字段

麹正业
2023-03-14

我使用的是Laravel,我试图使用HasOne::create方法从数组中创建一个相关记录。它插入相关记录,但不向主模型的外部字段添加新id。我做错了什么?

谢谢

    $contact = new Contact();

    $contact->company = $data['company'] ?? '';
    $contact->comment = $data['comment'] ?? '';

    $contact->save();

    $contact->address()->create($data['address']);

    ...

    var_dump($contact->address_id); exit();

关系工作正常,指定所有字段。由-

var_dump结果-null

此外,$data['地址']包含有效数据,在地址模型中指定为可填充数据,address_id在联系人模型中可填充数据

UPD:

联系类:

public function address()
{
    return $this->hasOne(Address::class, 'id', 'address_id');
}

地址类:

    public function contact()
{
    return $this->belongsTo(Contact::class, 'id', 'address_id');
}

$data['地址']包含一个数组

共有1个答案

莫典
2023-03-14

这里有一个很好的关于雄辩关系的指南。

基于此,我刚刚测试了下面的代码,它运行良好(使用Laravel5.8)

迁移

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Cars extends Migration
{

    public function up()
    {
        Schema::create('owners', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });

        Schema::create('cars', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();

            $table->integer('owner_id')->unsigned()->index()->nullable();
            $table->foreign('owner_id')->references('id')->on('owners');
        });
    }

    public function down()
    {
        Schema::drop('cars');
        Schema::drop('owners');
    }
}

模型

//App/Owner.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Owner extends Model
{
    protected $fillable = ['name'];

    public function car()
    {
        return $this->hasOne(Car::class);
    }

}

//App/Car.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Car extends Model
{
    protected $fillable = ['name'];

    public function owner()
    {
        return $this->belongsTo(Owner::class);
    }
}

测验

<?php

namespace Tests\Feature;

use App\Owner;
use Tests\TestCase;

class TestCars extends TestCase
{
    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function testExample()
    {
        $owner = new Owner(['name' => 'Jack']);
        $owner->save();

        $owner->car()->create(['name' => 'Nice Car']);
    }
}

SQL

select * from cars;
------------
# id, name, created_at, updated_at, owner_id
'1', 'Nice Car', '2019-06-21 13:08:58', '2019-06-21 13:08:58', '1'

select * from owners
-------------
# id, name, created_at, updated_at
'1', 'Jack', '2019-06-21 13:08:58', '2019-06-21 13:08:58'
 类似资料:
  • 问题内容: 让我们考虑以下情况-“文章”文档中有两个字段- content(string)和views(int)。视图字段未建立索引。views字段包含此文章被阅读了多少次的信息。 来自官方文档: 我们还说过文件是不可变的:它们不能更改,只能替换。更新API必须遵守相同的规则。从外部看,似乎我们正在部分更新文档。但是,在内部,更新API仅管理与我们已经描述过的相同的检索- 更改-重新索引过程。 但

  • 问题内容: 我有一个连接到我的应用程序状态的redux表单,一切似乎都很好。我可以获取数据并将其加载到表单中,然后提交数据并获取所需的元数据… 但是,我有一个自定义交互(颜色选择器),需要动态更改托管字段的值。我尝试的所有操作都将更改屏幕,但不会更改redux表单状态,即,当我提交表单时,我只会获取原始字段数据,而不是表单中显示的新数据。 下面的版本将字段属性传递给组件,并尝试使用ColorSel

  • 问题内容: 我将an 绑定到输入,但是绑定到该变量的值未在该指令声明的位置之外进行更新: 选择新日期时,仅内部会更新。外部的那个仍然是旧值(可能取决于我是否在控制器中声明了它,这无关紧要)。 我正在使用angular-materialize,我不确定这是否是问题的根源,但是没有意义,因为这是与CSS框架materializecss一起使用的特定的angular框架。 这是我正在使用的组件。 编辑:

  • 问题内容: 我正在尝试学习JavaFX,并将swing应用程序转换为JavaFX。我想做的是使用JavaFX来显示程序的进度。 我以前在Swing中所做的是首先使用自定义JComponent创建一个JFrame。然后让我的主程序调用自定义JComponent的方法,该方法将更改JComponent和repaint()中的形状颜色。 下面给出了我想在JavaFX中实现的目标的想法: 我目前将此作为我

  • 我有两个实体具有@OneTomany(Entity1)&@ManyToOne(Entity2)双向关系。在@OneTomany关系中,我有@Cascading{Cascade.All}。但是当我在事务或方法中将具有@ManyToOne关系的实体的初始为false的boolean属性更改为true,然后又变回false时,它会导致数据库触发更新查询,将实体的boolean设置为false,这似乎是错

  • 问题内容: 我正在开发非OSGI应用程序,我需要更新骆驼路线中使用的某些属性的值(已加载BridgePropertyPlaceHolder)。所以我认为: 要使用酷炫的管理控制台Hawtio,以便使用JMX更新骆驼 创建一个将更新属性..的JMX MBean。 我成功创建了MBean操作并使用JMX对其进行了调用,但是我不知道如何更新依赖于这些属性的骆驼路线。 有没有一种方法可以从外部更新骆驼上下