0

看来我需要将原始模型保存在新生成的模型上才能正确保存关系。

我希望下面的测试用例能说明我的问题:

// migrations
Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});
Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->bigInteger('user_id')->nullable();
    $table->timestamps();
});

//models
class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class)
            ->withDefault(['name' => 'Guest User']);
    }
}

//test
public function test_foreign_key()
{
    $post = factory(Post::class)->create();

    $user = $post->user; // created from ->withDefault()
    $user->save();
    $this->assertNotNull($post->user);
    $this->assertNotNull($post->user_id);
}

通过原始模型的附加关联,测试通过:

public function test_foreign_key_associates()
{
    $post = factory(Post::class)->create();

    $post->user->save();
    $this->assertNotNull($post->user);
    $post->user()->associate($post);
    $this->assertNotNull($post->user_id);
}

编辑:我现在正在做的是以下withDefault关系:

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class)
            ->withDefault(function (User $user, Post $post) {
                $user->name = "Guest User";
                $user->save();
                $post->user_id = $user->id;
            });
    }
}
4

0 回答 0