在Laravel中使用日期类型列时出现“Undefined property: stdClass”错误。如何解决?

6

我正在尝试通过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')}} "行。

即使我将这一行改为"{{$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 (View: 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)

请提供您的所有控制器代码。 - VIKAS KATARIYA
我已经向问题中添加了一些代码。 - Siqueira
你需要提供控制器方法来返回该视图,以便我们查看您如何检索数据,因为您没有使用模型。 - lagbox
它就在那里。我说“控制器代码是:”,而“solicitacoes.blade.php”代码是检索数据的代码。一切都在那里。 - Siqueira
你还需要帮助吗? - emotality
2个回答

8
根据错误信息,您在solicitacoes.blade.php中调用了名为$solicitacao_data的属性,
您的stdClass $sol没有solicitacao_data属性,因此出现错误。
确保通过查询选择列solicitacao_data,
并且不要将此字段放在模型的$hidden中。

正如我上面发布的代码,我正在使用"$sol->solicitacao_data = $date_sol;"。 - Siqueira
我明白你的意思。我已经发布了solicitacoes.blade.php文件,在该文件中使用了“$sol->solicitacao_data->from_date”。 - Siqueira
这可能是错误的地方。但我不知道如何解决它。 - Siqueira
它通过控制器将信息保存在数据库中,但当数据需要被读取时,出现了错误。 - Siqueira
2
@Siqueira 我认为你需要使用dd($sol)并且发布$sol的实际内容。 - TsaiKoga
显示剩余11条评论

0
$date_sol = new DateTime();
    $date_sol = DateTime::createFromFormat("d/m/Y",$request->input('solicitacao_data'));

    $sol->solicitacao_data = $date_sol;

    $sol->save();

根据上述代码,在您的 Blade 文件中必须有一个名为 "solicitacao_data" 的输入才能使以下代码正常工作: $date_sol = DateTime::createFromFormat("d/m/Y",$request->input('solicitacao_data'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接