简体   繁体   English

未定义的属性:> 在 Laravel 上使用日期类型列时出现 stdClass 错误。 我该如何解决?

[英]Undefined property: > stdClass error when using date type column on Laravel. How can I solve it?

I am trying to insert data (date type data) through a form in a web service built with Laravel.我正在尝试通过使用 Laravel 构建的 Web 服务中的表单插入数据(日期类型数据)。

the solicitacoes.blade.php code: slicitacoes.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

The error is on the line " {{ \\Carbon\\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}} "错误在“{{\\Carbon\\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}}”行上

Even if I change the line " {{ \\Carbon\\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}} " to " {{$sol->solicitacao_data}} ", I still getting the same error.即使我将“ {{ \\Carbon\\Carbon::parse($sol->solicitacao_data->from_date)->format('d/m/Y')}} ”更改为“ {{$sol->solicitacao_data }} ",我仍然遇到同样的错误。

The controler code is:控制器代码为:

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

$sol->solicitacao_data = $date_sol;

$sol->save();

I am inserting '25/2/2020', but I get the following error:我正在插入“25/2/2020”,但出现以下错误:

Facade\\Ignition\\Exceptions\\ViewException Undefined property: stdClass::$solicitacao_data (View: C:\\xampp\\htdocs\\laravel\\workflow-novo\\resources\\views\\solicitacoes.blade.php) Facade\\Ignition\\Exceptions\\ViewException 未定义的属性:stdClass::$solicitacao_data(视图:C:\\xampp\\htdocs\\laravel\\workflow-novo\\resources\\views\\solicitacaoes.blade.php)

The database table is created through migrations, as follows:数据库表是通过migrations创建的,如下:

<?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');
    }
}

I need to store and recover the date using Laravel.我需要使用 Laravel 存储和恢复日期。 How can I make it without the error above?我怎样才能没有上面的错误?

**I have noticed that if I try to save the time, the database saving does not work properly. **我注意到,如果我尝试节省时间,则数据库保存无法正常工作。 For example, the following code:例如,以下代码:

$date_sol = Carbon::createFromFormat("d/m/Y H:i:s","20/12/2020 01:00:00");

$sol->solicitacao_data = $date_sol;

stores the following data on solicitacao_data column.将以下数据存储在 solicacao_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)

Note that only the date is being stored.请注意,仅存储日期。

I have executed the command dd($sol) in the solicitacao.blade.php I have got the following:我已经在slicacao.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"
}

Even though the table has the columns I have shown before.即使该表具有我之前显示的列。

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)

According to the Error message, you are call the attributes named $solicitacao_data in the solicitacoes.blade.php,根据错误信息,您在$solicitacao_data中调用名为$solicitacao_data的属性,

Your stdClass $sol have no attribute solicitacao_data , so the error occurs.您的 stdClass $sol没有属性solicitacao_data ,因此会发生错误。

Make sure to select the column solicitacao_data by query,确保通过查询选择列solicitacao_data

and don't put this field in model's $hidden .并且不要将此字段放在模型的$hidden

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

    $sol->solicitacao_data = $date_sol;

    $sol->save();

According to above code, there must be an input with name "solicitacao_data" on your blade file for $date_sol = DateTime::createFromFormat("d/m/Y",$request->input('solicitacao_data'));根据上面的代码,您的刀片文件中必须有一个名为“solicitacao_data”的输入,用于$date_sol = DateTime::createFromFormat("d/m/Y",$request->input('solicitacao_data')); to work.上班。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM