Это - то, как мне удалось сделать это путем изменения сценария MSBUILD в моем.CSPROJ файле:
Первый, откройте свой.CSPROJ файл как файл, а не как проект. Прокрутите к нижней части файла, пока Вы не находите, что это прокомментировало код, незадолго до завершения тега Проекта:
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
Теперь мы просто вставляем нашу собственную цель AfterBuild для удаления любого существующего XmlSerializer и SGen наше собственное, как так:
<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
<!-- Delete the file because I can't figure out how to force the SGen task. -->
<Delete
Files="$(TargetDir)$(TargetName).XmlSerializers.dll"
ContinueOnError="true" />
<SGen
BuildAssemblyName="$(TargetFileName)"
BuildAssemblyPath="$(OutputPath)"
References="@(ReferencePath)"
ShouldGenerateSerializer="true"
UseProxyTypes="false"
KeyContainer="$(KeyContainerName)"
KeyFile="$(KeyOriginatorFile)"
DelaySign="$(DelaySign)"
ToolPath="$(TargetFrameworkSDKToolsDirectory)"
Platform="$(Platform)">
<Output
TaskParameter="SerializationAssembly"
ItemName="SerializationAssembly" />
</SGen>
</Target>
, Который работает на меня.
Этого нужно избежать любой ценой, чтобы использовать и сохранить нулевые даты. Эта функция могла помочь преодолеть разрыв, пока они полностью не удалены из Вашего кода. Может быть это, мог быть назван "isEmptyDate" или "isNullDate".
// Returns 'true' for zero, zero dates or times, null, false
function isZeroDate($date)
{
if (empty($date)) return true;
if (is_string($date)) {
// Extract any character that it's not digit and convert it to int
// 0000-00-00 00:00 || 0000 || 00:00 || 0000-00-00 will return true
$ival = intval(preg_replace('~\D~', '', $date), 10);
if ($ival == 0) return true;
}
return false;
}
Углерод и классы DateTime не могут проанализировать нулевые даты с этим форматом "0000-00-00 0:00:00".
С любой платформой PHP как Laravel, используйте nullable столбцы в своих миграциях для хранения ПУСТЫХ дат в DB
, например, в Laravel:
$table->timestamp('some_date')->nullable()->default(null);
, например, в MySql:
create table date_test (some_date datetime null default null);
insert into date_test (some_date) values (null);