【问题标题】:Can't save in Laravel 5.7 - Nothing happening无法在 Laravel 5.7 中保存 - 什么也没有发生
【发布时间】:2019-01-07 17:29:02
【问题描述】:

我遇到了一个我仍然无法解决的问题。 在一个视图中,我试图从表中获取一些信息,从这些信息中我需要保存新数据并更新同一张表上的一些其他数据,但是当我点击“保存”时,什么也没有发生。

我一直在这里和互联网上寻找类似的东西,但没有任何帮助。

我有这样的看法:

<div class="form-group">
    {!! csrf_field() !!}        

    @if(isset($impressora))       

        <div class="form-row">
            <div class="form-group col-md-4">
                <label for="setor">Setor*:</label>
                <input class="form-control" placeholder="Digite o setor..." required="required" name="setor" type="text" value="{{ $impressora->setor }}" id="setor">
            </div>
            <div class="form-group col-md-4">
                <label for="marca">Marca*:</label>
                <input class="form-control" placeholder="Digite a marca..." required="required" name="marca" type="text" value="{{ $impressora->marca }}" id="marca">
            </div>
            <div class="form-group col-md-4">
                <label for="modelo">Modelo*:</label>
                <input class="form-control" placeholder="Digite o modelo..." required="required" name="modelo" type="text" value="{{ $impressora->modelo }}" id="modelo">
            </div>     
        </div>

        <div class="form-row">
            <div class="form-group col-md-4">
                <label for="tipo">Tipo*:</label>                    
                <select name="tipo" id="tipo" class="form-control" required="required">
                    <option value="Toner">Toner</option>
                    <option value="Tinta">Tinta</option>
                    <option value="Pecas">Peças</option>
                </select>
            </div>
            <div class="form-group col-md-4">
                <label for="tonner">Tonner*:</label>                    
                <select name="toner" id="toner" class="form-control" required="required">
                    <option value="Q2612A">Q2612A</option>
                    <option value="TN580/650">TN580/650</option>
                    <option value="T664 - PRETO">T664 - PRETO</option>
                    <option value="T664 - AMARELO">T664 - AMARELO</option>
                    <option value="T664 - CIANO">T664 - CIANO</option>
                    <option value="T664 - MAGENTA">T664 - MAGENTA</option>
                    <option value="CARTUCHO 45">CARTUCHO 45</option>
                    <option value="12017SR">12017SR</option>
                    <option value="CE278A">CE278A</option>
                    <option value="CB435A/CB436A/CE285A">CB435A/CB436A/CE285A</option>
                    <option value="TN360">TN360</option>
                    <option value="TN3472">TN3472</option>
                    <option value="TN750">TN750</option>
                    <option value="AMARELO">AMARELO</option>
                    <option value="CIANO">CIANO</option>
                    <option value="MAGENTA">MAGENTA</option>
                    <option value="PRETO">PRETO</option>
                    <option value="ROLO PRESSÃO BROTHER HL2240">ROLO PRESSÃO BROTHER HL2240</option>
                    <option value="ROLO PRESSÃO BROTHER HL2270">ROLO PRESSÃO BROTHER HL2270</option>
                    <option value="TN660">TN660</option>
                    <option value="LEXMARK E120">LEXMARK E120</option>
                    <option value="CLINDRO BROTHER DCP8080">CLINDRO BROTHER DCP8080</option>
                    <option value="CLINDRO BROTHER DR450">CLINDRO BROTHER DR450</option>
                    <option value="CLINDRO BROTHER DR620">CLINDRO BROTHER DR620</option>
                    <option value="CLINDRO BROTHER DR350">CLINDRO BROTHER DR350</option>
                    <option value="ROLO DE PAPEL DE PONTO">ROLO DE PAPEL DE PONTO</option>
                    <option value="TN450">TN450</option>
                </select>
            </div>
            <div class="form-group col-md-4">
                <label for="setor">Marca do Toner*:</label>                    
                <select name="tonerMarca" id="tonerMarca" class="form-control" required="required">
                    <option value="TONER CARTRIDGE">TONER CARTRIDGE</option>
                    <option value="EVOLUT">EVOLUT</option>
                    <option value="CHINAMATE">CHINAMATE</option>
                    <option value="EPSON">EPSON</option>
                    <option value="HP">HP</option>
                    <option value="S.M.">S.M.</option>
                    <option value="A.E.">A.E.</option>
                    <option value="TONER LASER">TONER LASER</option>
                    <option value="MC">MC</option>
                    <option value="J.PROLAB">J.PROLAB</option>
                    <option value="PQTC">PQTC</option>
                    <option value="KATUN">KATUN</option>
                    <option value="N.S.">N.S.</option>
                </select>
            </div>
        </div>

        <div class="form-row">
            <div class="form-group col-md-4">
                <label for="datacompra">Data da Troca*:</label>
                <input class="form-control" required="required" name="datacompra" type="date" value="" id="datacompra">
            </div>
            <div class="form-group col-md-4">
                <label for="local">Quantidade*:</label>                                     
                <input class="form-control" placeholder="Quantidade de toner..." required="required" name="quantidade" type="text" id="quantidade">               
            </div>                
            <div class="form-group col-md-4">
                <label for="local">Folhas*:</label>                                     
                <input class="form-control" placeholder="Quantidade de folhas..." required="required" name="folhas" type="text" id="folhas">
            </div>
        </div>           
    @endif

    <div class="form-group">            
        <input type="submit" Value="Salvar" class="btn btn-primary form-control">
    </div>
</div>

我有一个这样的模型:

<?php

namespace SouzaCambos;

use Illuminate\Database\Eloquent\Model;

class TiPrinter extends Model
{
   protected $table = 'titoner_troca';

   protected $primaryKey = 'idtroca';

   public $timestamps = false;

   public $increment = false;    
}

在我的控制器中我有这个:

public function printerInsert(Request $request){

    $PrinterTable = TiPrinter::all();

    //dd($PrinterTable);

    if ($PrinterTable->idtroca != null) {
        $oldsheet = TiPrinter::latest('folhas')
            ->where('marca', $request->marca)
            ->where('modelo', $request->modelo)
            ->where('toner', $request->toner)
            ->where('marca_toner', $request->tonerMarca)
            ->first();

        $pageCount = TiPrinter::latest('folhasnew')
            ->where('marca', $request->marca)
            ->where('modelo', $request->modelo)
            ->where('toner', $request->toner)
            ->where('marca_toner', $request->tonerMarca)
            ->first();
    }   

    $TiPrinter = new TiPrinter;
    $TiPrinter->setor = $request->setor;
    $TiPrinter->marca = $request->marca;
    $TiPrinter->modelo = $request->modelo;
    $TiPrinter->toner = $request->toner;
    $TiPrinter->marca_toner = $request->tonerMarca;
    $TiPrinter->folhas = $request->folhas;

    if (is_null($pageCount)) {
        $pageCount->folhasnew = 0;
    } elseif ($pageCount->folhasnew >= 0) {            
        $pageCount->folhasnew = $request->folhas - $oldsheet->folhas;
        $TiPrinter->folhasnew = 0;
        //$TiPrinter->folhasnew = $request->folhas - $oldsheet->folhas;
    }      

    //Decremento toner
    $printerSub = TiToner::where('modelo', $request->toner)
        ->where('marca', $request->tonerMarca)
        ->first();

    $printerSub->quantidade = $printerSub->quantidade - $request->quantidade;
    $printerSub->data = $request->dataTroca;

    //Save na tabela toner
    if ($pageCount != null) {
        $pageCount->save();
    }
    $TiPrinter->save();
    $printerSub->save();        

    return redirect()->to('portal-cambos/ti/impressoras/TiImpressorasToner');
}

另外,我在 dd($PrinterTable); 中什么也没有得到。行,我已经多次查找此代码,并没有发现任何错误或与我之前编写的其他代码不同。

谁能帮帮我?也许有人会看到我没有看到的东西。

在此先感谢大家,如果有关于此事的帖子,我想念它,请告诉我。

【问题讨论】:

  • 你没有表单的开始和结束标签
  • 我不确定为什么$PrinterTable 会为空。您会遇到另一个问题,因为您获取的是 TiPrinter 中的所有记录,而不仅仅是一条记录,因此它应该始终是一个集合而不是单个记录。
  • 感谢@Akintunde-Rotimi 和 aynber 的回答,Akintunde,你是对的,标签的打开和关闭丢失了,我解决了这个问题并遇到了另一个错误...... Aynber,这个变量可以为空,因为我首先必须检查表上是否有一些数据,如果是,我必须查找一些特定数据并在特定字段上上传新数据,如果没有,我必须插入一个新行.

标签: php laravel view controller save


【解决方案1】:

首先,您的视图中没有您在站点提供的开始表单标签,不确定您是否忘记复制它。

<form method="post" action="{{ action('TestController@test') }}">

这个表单里面旁边的提交按钮,这基本上会调用TestController中的测试方法,当然你需要根据自己的需要来修改。

其次,您的“表单”中有许多字段,但您的模型中没有任何可填充数组,出于安全原因,您需要将每个字段(列)添加到可填充数组中,请执行以下操作:

class TiPrinter extends Model
{
   protected $table = 'titoner_troca';

   protected $fillable = ['value1', 'value2']; // add every fillable name into this array
}

您需要添加所有可填写的元素,例如,如果我有一个表单,并且只有 value1 和 value2 将被保存或修改,上述内容就可以了。

第三,你应该可以像这样将 TiPrinter 保存在你的 store 方法中:

public function store(Request $request) {
    $tiprinter = TiPrinter::create($request->all());

    if($tiprinter) {
        // success redirect to somewhere....
    }

    // error do something*
}

只需尝试这些步骤,如果仍然失败,请提供更多信息。

【讨论】:

  • 感谢@utdev,我会尝试并返回结果。
  • 太棒了@utdev,谢谢,这对我很有帮助,但现在我收到错误“从空值创建默认对象”。我会尝试自己解决另一个问题。谢谢大家的时间。
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多