Лараваль - Модельные поля возвращаются нулевые - PullRequest
0 голосов
/ 27 февраля 2020

У меня странная проблема, которая приводит к сбою моих модульных тестов в Laravel. У меня есть таблица, которая создается следующим образом:

Schema::create('message_threads', function (Blueprint $table) {
    $table->string('id')->primary();
    $table->timestamps();
    $table->softDeletes();
    $table->string('user_id');
    $table->string('folder_id')->nullable();
    $table->boolean('starred')->default(false);
    $table->string('thread_id')->nullable();
    $table->foreign('user_id')->references('id')->on('users');
    $table->foreign('folder_id')->references('id')->on('message_folders')->onDelete('cascade');
});

И в связанной с ней модели, когда я вызываю функцию getAttributes (), поля помечены и folder_id отсутствуют.

//The code
$messageThread = factory(MessageThread::class)->create();
print_r($messageThread->getAttributes());

Выводит следующее:

(
    [user_id] => USR-258995103d8c4d37bd6ec3a38dfe9312
    [id] => MTD-cb4f8f66ddfc4385b31155212cb57f91
    [updated_at] => 2020-02-27 14:15:55
    [created_at] => 2020-02-27 14:15:55
)

Почему отсутствуют эти поля, особенно поле помеченное звездочкой , значение которого по умолчанию равно ложь?

1 Ответ

0 голосов
/ 27 февраля 2020

вы можете использовать свойство $visible для определения белого списка атрибутов, которые должны быть включены в массив вашей модели и представление JSON. Все остальные атрибуты будут скрыты при преобразовании модели в массив или JSON:

class MessageThread extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $visible = ['starred', 'folder_id', ...];
}
...