Использование функции save () в модели без первичного ключа приводит к ошибке - PullRequest
0 голосов
/ 19 октября 2018

Я столкнулся с необычной ошибкой при использовании функции save () Laravel.Это ошибка:

SQLSTATE[42601]: Syntax error: 7 ERROR:  zero-length delimited identifier at or near """"

LINE 1: ...pdate "t_h_ledger_sheet" set "o_memo1" = $1 where "" is null
                                                              ^ (SQL: update "t_h_ledger_sheet" set "o_memo1" = 1234 where "" is null)

Может кто-нибудь знать, что вызвало это и что можно сделать, чтобы это исправить?Вот моя модель:

<?php
namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class LedgerSheet extends Model
{
    protected $table = 't_h_ledger_sheet';
    protected $primaryKey = null;
    public $incrementing = false;
    public $timestamps = false;
}

Нет первичного ключа, вызывающего ошибку?

РЕДАКТИРОВАТЬ: Вот что я сделал.Также дополнительная информация, эта таблица должна содержать только 1 строку данных

$memos = LedgerSheet::first();

if ($memos == null) {
    $memos = new LedgerSheet;
}

$o_memo1 = "ASDF";
$o_memo2 = "ASDF";
$o_memo3 = "ASDF";
$o_memo4 = "ASDF";
$o_memo5 = "asdf";
$o_memo6 = "asdf";
$o_memo7 = "asdf";
$o_memo8 = "asdf";

DB::transaction(function() use($memos, $o_memo1, $o_memo2, $o_memo3, $o_memo4, $o_memo5, $o_memo6, $o_memo7, $o_memo8) {

    $memos->o_memo1 = $o_memo1;
    $memos->o_memo2 = $o_memo2;
    $memos->o_memo3 = $o_memo3;
    $memos->o_memo4 = $o_memo4;
    $memos->o_memo5 = $o_memo5;
    $memos->o_memo6 = $o_memo6;
    $memos->o_memo7 = $o_memo7;
    $memos->o_memo8 = $o_memo8;

    try{
       $memos->save();
    }catch(\Exception $e){
       error_log($e->getMessage());   // insert query
    }

});

2-е РЕДАКТИРОВАНИЕ УДАЛЕНИЕ транзакции обернуть: $ memos = LedgerSheet :: first ();

if ($memos == null) {
    $memos = new LedgerSheet;
}

$memos->o_memo1 = "ASDF";
$memos->o_memo2 = "ASDF";
$memos->o_memo3 = "ASDF";
$memos->o_memo4 = "ASDF";
$memos->o_memo5 = "asdf";
$memos->o_memo6 = "asdf";
$memos->o_memo7 = "asdf";
$memos->o_memo8 = "asdf";

try{
    $memos->save();
}catch(\Exception $e){
    error_log($e->getMessage());   // insert query
}

EDIT: Невозможно использовать функцию save () в модели без первичного ключа.

1 Ответ

0 голосов
/ 19 октября 2018

Глядя на документацию по PostgreSQL, я полагаю, что для вас это не сработает на самой первой строке, где вы пытаетесь получить первый элемент, потому что вы не задаете никаких критериев, на которые нужно смотреть.

Вы пробовали:

LedgerSheet::all()->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...