【发布时间】:2017-08-08 08:42:48
【问题描述】:
我正在使用存在复选框的表单,但目标模型的字段必须是布尔类型,因为它们在我的迁移中定义为布尔类型。例如:
$table->boolean('is_active')->default(true);
模型的值是这样填充的:
foreach (static::getFillableFields() as $field) {
$entry->$field = $request->input($field);
}
所以我添加了演员表以使该字段为布尔值:
class Entry extends Model
{
protected $casts = [
'is_active' => 'boolean',
];
但是现在我看到的是:当表单的复选框被选中并且我在请求中有 '1' 字符串时,它运行良好 - 当我访问 $entry->is_active 时,'1' 给出 'true'。但是,当未选中复选框时,它会给出“null”值,并且 - 我不知道为什么 - 当模型的字段设置为 null 时,它会返回 null(不是“false”,正如我所料)。 为什么会这样?在我的情况下,这使得强制转换毫无用处。我可以改变这种行为吗?
我对为每个布尔字段添加这个(访问器/修改器)的想法并没有太大的启发(但实际上这导致了我需要的):
public function setIsActiveAttribute($value)
{
$this->attributes['is_active'] = (bool)$value;
}
public function getIsActiveAttribute(bool $value): bool
{
return $value;
}
【问题讨论】:
-
你可以
$this->attributes['is_active'] = is_null($value) ? false : (bool)$value吗? -
@Omisakin Oluwatobi,谢谢。请参阅我对 Devon 回复的评论。
-
似乎问题已经解决了github.com/laravel/framework/issues/14942 有人建议严格在这里:github.com/laravel/framework/issues/…(尽管它与
groupBy()有关,但它实际上是我理解的解决方案)