【问题标题】:Laravel - Model Fields Is Returning NullLaravel - 模型字段返回空值
【发布时间】:2020-06-11 14:14:31
【问题描述】:

我有一个奇怪的问题导致我在 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() 函数时,字段 starred 和 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
)

为什么缺少这些字段,尤其是默认值为 false 的 starred 字段?

【问题讨论】:

标签: php laravel laravel-5


【解决方案1】:

您可以使用$visible 属性定义应包含在模型数组和JSON 表示中的属性白名单。当模型转换为数组或 JSON 时,所有其他属性将被隐藏:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2015-04-18
    • 2013-08-11
    • 2021-03-29
    • 2012-05-10
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多