У меня есть следующий код: я использую его простым способом для извлечения столбцов таблицы feature_set, поэтому хотел бы air_conditioning, pool ... и т. Д. С логическим значением, которое по умолчанию равно 0.
Однако, когда я использую фабрику или создаю ее непосредственно, как показано ниже -> air_conditioning всегда имеет значение null, и я не могу понять, почему. Я тестировал с mysql Db, и когда я добавляю новую строку, он по умолчанию принимает значение 0. Я что-то здесь упускаю, почему в экземпляре модели не установлены значения по умолчанию 0.
class FeatureSetTest extends TestCase
{
use RefreshDatabase;
public function testCanCreateFeatureSetAndValuesDefaultToFalse()
{
$featureSet = new FeatureSet(['property_id' => '1']);
$featureSet->save();
$this->assertFalse($featureSet->air_conditioning);
}
}
...
public function up()
{
Schema::create('feature_sets', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('property_id');
$table->boolean('air_conditioning')->default(false);
$table->timestamps();
});
}
Если я сохраню dd $ featureSet после его сохранения в тесте, я получу:
#attributes: array:4 [
"property_id" => "1"
"updated_at" => "2018-05-12 16:15:19"
"created_at" => "2018-05-12 16:15:19"
"id" => 1
]
Если я сделаю dd (DB :: select (DB :: raw ('SHOW CREATE TABLE feature_sets')))); выводит нижнее значение, поэтому 0 устанавливается по умолчанию и:
CREATE TABLE `feature_sets` (\n
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,\n
`property_id` int(10) unsigned NOT NULL,\n
`air_conditioning` tinyint(1) NOT NULL DEFAULT '0',\n
`created_at` timestamp NULL DEFAULT NULL,\n
`updated_at` timestamp NULL DEFAULT NULL,\n
PRIMARY KEY (`id`)\n
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_c
И, наконец, если я поставлю dd (DB :: select (DB :: raw ('SELECT * FROM feature_sets'))); в моем тесте я вижу, что значение по умолчанию установлено правильно:
array:1 [
0 => {#598
+"id": 1
+"property_id": 1
+"air_conditioning": 0
+"created_at": "2018-05-12 15:44:31"
+"updated_at": "2018-05-12 15:44:31"
}
]
// Модель набора функций.
<?php
namespace App\Models\Property;
use Illuminate\Database\Eloquent\Model;
class FeatureSet extends Model
{
protected $guarded = [];
public function asFeaturesArray()
{
return [
'air_conditioning' => [
'title' => __('Air Conditioning'),
'value' => $this->air_conditioning
]
];
}
}
Я не понимаю, почему он не возвращает мне 0 для -> air_conditioning