【问题标题】:How to use Laravel factory to create multiple models with 'belongsTo' relationships如何使用 Laravel 工厂创建具有 \'belongsTo\' 关系的多个模型
【发布时间】:2022-11-22 19:39:12
【问题描述】:

我正在尝试为我的应用程序创建一个单元测试,并希望测试是否存在关系。对于我的场景,我有一个模型“服务”,它有一个 belongsTo 关系的“company_id”字段。

我想在我的测试中使用一个工厂来创建 10 个“服务”。每个服务都应该有自己独特的“公司”

我一直在靠近,我最近的尝试是这样的

这是我的服务模型中的关系

    /**
     * Get the company a specified service belongs to
     *
     * @return BelongsTo
     */
    public function company(): BelongsTo
    {
        return $this->belongsTo(Company::class);
    }

这是我的单元测试中的代码。为了实际查看发生了什么,我将结果输出到控制台。

    Service::factory()
        ->count(10)
        ->create([
            'company_id' => Company::factory()->create(),
        ]);

    print_r((Company::all())->toArray());
    print_r((Service::with(['company'])->get())->toArray());

结果很有趣。

  • 我正确地获得了 10 个填充了 company_id 的服务。
  • 所有服务都有一个company_id,但每项服务都是一样的
  • 只创建了一个“公司”
  • 虽然创建了'公司',但是服务的'公司'关系为空
    COMPANY
    Array
    (
        [0] => Array
            (
                [id] => E39069C262B289573BA59BE5DA3DA182
                [name] => Bartoletti, Boehm and Cronin
                [account_number] => 013
                [phone_number] => (864) 363-8603
                [created_at] => 2022-11-22T10:22:12.000000Z
                [updated_at] => 2022-11-22T10:22:12.000000Z
                [deleted_at] => 
            )

    )

    SERVICES
    Array
    (
        [0] => Array
            (
                [id] => 92D9C3EEC3F550BBE627B0C7295E948E
                [name] => Aut debitis quam excepturi dolor.
                [company_id] => E39069C262B289573BA59BE5DA3DA182
                [created_at] => 2022-11-22T10:22:12.000000Z
                [updated_at] => 2022-11-22T10:22:12.000000Z
                [deleted_at] => 
                [company] => 
            )

        [1] => Array
            (
                [id] => B358067875A3AED5F2590321EE7040E3
                [name] => Labore quia quia doloribus fuga adipisci.
                [company_id] => E39069C262B289573BA59BE5DA3DA182
                [created_at] => 2022-11-22T10:22:12.000000Z
                [updated_at] => 2022-11-22T10:22:12.000000Z
                [deleted_at] => 
                [company] => 
            )

        ... repeated 10 times
    )

我如何使用工厂创建 10 个服务,每个服务都有自己的公司?

【问题讨论】:

  • 您可以在工厂内部调用 factory(),这对于每个服务都是不同的。如果您在 create() 方法中传递 id,则它对于每个创建的服务都是相同的。因此,将'company_id' => Company::factory()->create(), 移到您的服务工厂内(如果需要,您可以使用作用域)

标签: laravel relationship factory belongs-to


【解决方案1】:

对于 belongsTo 关系,你可以这样做:

Service::factory()
    ->count(10)
    ->for(Company::factory())
    ->create();

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 2021-11-26
    • 2016-04-26
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2018-06-13
    相关资源
    最近更新 更多