php - 未定义的属性:> 在 Laravel 上使用日期类型列时出现 stdClass 错误。我该如何解决?
问题描述
我正在尝试通过使用 Laravel 构建的 Web 服务中的表单插入数据(日期类型数据)。
solicitacoes.blade.php 代码:
@extends('layout.app', ["current" => "solicitacaos"])
@section('body')
<div class="container">
<div class="card-border">
<div class="card-body">
<h3 class="card-title">Solicitações</h3>
<table class="table table-striped table-bordered table-hover">
<tr>
<th> Professor
</th>
<th>
Criação
</th>
<th>
Data Solicitação
</th>
<th>
Nome do Produto
</th>
<th>
Observações
</th>
<th>
Status
</th>
<th>
Ação
</th>
</tr>
@foreach($sols as $sol)
@php
dd($sol)
@endphp
<tr>
<td> {{$sol->nome_professor}}
</td>
<td> {{$sol->criacao}}
</td>
<td> {{dd($sol)}}
</td>
<td> {{$sol->nome_produto}}
</td>
<td> {{$sol->observacao}}
</td>
<td> {{$sol->status}}
</td>
<td>
<a href="/solicitacao/apagar/{{$sol->id}}" class="btn btn-sn btn-danger">Cancelar</a>
</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
@endsection
错误在“ {{ \Carbon\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}} ”行
即使我将“ {{ \Carbon\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}} 行更改为“ {{$sol->solicitacao_data }}“,我仍然得到同样的错误。
控制器代码为:
$date_sol = new DateTime();
$date_sol = DateTime::createFromFormat("d/m/Y",$request->input('solicitacao_data'));
$sol->solicitacao_data = $date_sol;
$sol->save();
我正在插入“25/2/2020”,但出现以下错误:
Facade\Ignition\Exceptions\ViewException 未定义属性:stdClass::$solicitacao_data (查看:C:\xampp\htdocs\laravel\workflow-novo\resources\views\solicitacoes.blade.php)
数据库表是通过迁移创建的,如下:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSolicitacaosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('solicitacaos', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('id_users')->unsigned();
$table->foreign('id_users')->references('id')->on('users');
$table->bigInteger('id_produto')->unsigned();
$table->foreign('id_produto')->references('id')->on('produtos');
$table->string('status');
$table->string('observacao');
$table->date('solicitacao_data');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('solicitacaos');
}
}
我需要使用 Laravel 存储和恢复日期。如果没有上述错误,我怎样才能做到这一点?
**我注意到,如果我尝试节省时间,数据库保存将无法正常工作。例如,下面的代码:
$date_sol = Carbon::createFromFormat("d/m/Y H:i:s","20/12/2020 01:00:00");
$sol->solicitacao_data = $date_sol;
在 solicitacao_data 列上存储以下数据。
MariaDB [login]> select * from solicitacaos;
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
| id | id_users | id_produto | status | observacao | solicitacao_data | crea
ted_at | updated_at |
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
| 24 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-30 23:47:52 | 2019-12-30 23:47:52 |
| 25 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:22:50 | 2019-12-31 01:22:50 |
| 26 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:23:08 | 2019-12-31 01:23:08 |
| 27 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:27:33 | 2019-12-31 01:27:33 |
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
4 rows in set (0.001 sec)
请注意,仅存储日期。
我已经在 solicitacao.blade.php 中执行了命令 dd($sol) 我得到了以下内容:
{#341 ▼
+"id": 1
+"status": "Em Análise"
+"nome_professor": "Olavo"
+"criacao": "2019-12-31 02:08:11"
+"nome_produto": "Cadeira"
+"observacao": "awdcasd"
}
即使表格中有我之前显示的列。
MariaDB [login]> select * from solicitacaos;
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
| id | id_users | id_produto | status | observacao | solicitacao_data | crea
ted_at | updated_at |
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
| 24 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-30 23:47:52 | 2019-12-30 23:47:52 |
| 25 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:22:50 | 2019-12-31 01:22:50 |
| 26 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:23:08 | 2019-12-31 01:23:08 |
| 27 | 1 | 1 | Em Análise | blabla | 2020-12-20 | 2019
-12-31 01:27:33 | 2019-12-31 01:27:33 |
+----+----------+------------+------------+------------+------------------+-----
----------------+---------------------+
4 rows in set (0.001 sec)
解决方案
根据错误消息,您调用$solicitacao_data
了 solicitacoes.blade.php 中命名的属性,
您的 stdClass$sol
没有属性solicitacao_data
,因此会发生错误。
solicitacao_data
确保通过查询选择列,
并且不要将此字段放在模型的$hidden
.
推荐阅读
- python-3.x - 我如何从作者那里获取文本作为在他们执行命令时触发某些响应的一种方式?
- c# - 如何从 C# 导出到 MS Word 中的文本创建多级列表
- mysql - 无法使用域名远程访问Mysql
- pycharm - Ubuntu18.04 上的 Pycharm - 主目录中以前版本的隐藏文件夹
- javascript - 向文件添加增量
- html - 如何通过 html 代码同时发送两个请求?
- javascript - 每个地区的人都一样的Javascript倒计时
- html - 如何正确设置表格中 tbody 元素的背景颜色?
- android - Flutter WebView App 不响应我的触摸事件
- javascript - 当我更改状态时,为什么排序不能正常工作?