Фабрика Laravel не возвращает правильные данные объекта - PullRequest
0 голосов
/ 22 января 2019

У меня есть следующая фабрика в Laravel 5.7, при ее вызове ничего не возвращается:

<?php

use Faker\Generator as Faker;
use Illuminate\Database\Eloquent\Model;

$factory->define(App\Record::class, function (Faker $faker) {
    return [
        "name" => $faker->name,
    ];
});

В то время как моя модель:

<?php
namespace App;
use App\Product;
use Illuminate\Database\Eloquent\Model;

class Record extends Model
{
    protected $table = "records";

    protected $fillable = ["name"];

    function __construct()
    {
        parent::__construct();
    }
}

И я вызываю фабрику здесь:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\RefreshDatabase;

use App;
use App\Product;
use App\Record;
use App\User;

class RecordTest extends TestCase
{
    use RefreshDatabase;
    use WithoutMiddleware;

    /** @test */
    public function when_record_page_for_existing_record_is_accessed_then_a_product_is_displayed()
    {
        //$record = factory(App\Record::class)->make();
        $record = factory(App\Record::class)->create();
       echo "\n\n$record->name\n\n";

    }
}

при печати

$record->name

Я ничего не получаю, не ноль, не пустая строка, просто ничего. В чем проблема? Если я сохраню все, что сгенерировано фабрикой, в переменную, а не возвращаю ее сразу, я вижу, что имя заполняется, но после его возврата ничего не происходит, оно исчезает

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Этот фрагмент кода является проблемной частью:

function __construct()
{
    parent::__construct();
}

Вы не передаете атрибуты родительскому конструктору. Eloquent принимает атрибуты модели в конструкторе, но ваш переопределяющий конструктор не принимает их и не передает их родителю.

Измените это на:

function __construct($attributes)
{
    parent::__construct($attributes);
}

Кстати, вы переопределяете конструктор Eloquent, но там ничего не делаете. Вы действительно хотите переопределить это?

0 голосов
/ 22 января 2019

По умолчанию phpunit не будет печатать ваш echo.

Чтобы распечатать, пожалуйста, используйте phpunit -v

...