Laravel обновление eloquent без обновления записи - PullRequest
0 голосов
/ 14 февраля 2020

Я использую Laravel eloquent для обновления записи. Проблема в том, что метод update возвращает целое число, равное количеству записей, которые должны быть обновлены, но это обновление не отражается в базе данных.

Я вставил несколько записей, чтобы проверить, нет ли несоответствия базы данных.

Я даже использую заполняемый метод и определил в нем каждый столбец.

Вот мой код.

Модальный

protected $fillable = [
        'id',
        'user_id',
        'ticket_no',
        'partner_id',
        'partner_user_name',
        'partner_user_email',
        'partner_user_contact',
        'contacted_for_id',
        'issue_type_id',
        'comm_mode_id',
        'opened_by_id',
        'assigned_to_id',
        'team_id',
        'priority_id',
        'opened_date',
        'tat_id',
        'resolved_date',
        'status_id',
        'description',
    ];

Контроллер

public function update(Request $request)
    {
        $validators = Validator::make($request->all(), [
            'assigned_to_id' => 'required',
            'team_id' => 'required',
            'resolve_date' => 'required',
            'status_id' => 'required',
            'description' => 'required',
        ]);

        if ($validators->fails()) {
            $data['result'] = false;
            $data['messages'] = $validators->errors()->first();

            return json_encode($data);
        }

        $assigned_to_id = $request->assigned_to_id;
        $team_id = $request->team_id;
        $resolve_date = $request->resolve_date;
        $status_id = $request->status_id;
        $description = $request->description;

        $ticket_row_id = $request->ticket_row_id;

        $updated = TICKET_TRACKER::where('id', $ticket_row_id)
            ->update(
                ['assigned_to_id' => $assigned_to_id],
                ['team_id' => $team_id],
                ['resolve_date' => $resolve_date],
                ['status_id' => $status_id],
                ['description' => $description]
            );
    }

Я не получаю никакой ошибки, которая является самым разочарованным.

1 Ответ

3 голосов
/ 14 февраля 2020

Чтобы обновить модель, измените:

 $updated = TICKET_TRACKER::where('id', $ticket_row_id)
            ->update(
                ['assigned_to_id' => $assigned_to_id],
                ['team_id' => $team_id],
                ['resolve_date' => $resolve_date],
                ['status_id' => $status_id],
                ['description' => $description]
            );

By:

 $updated = TICKET_TRACKER::where('id', $ticket_row_id)
       ->update([
                 'assigned_to_id' => $assigned_to_id,
                 'team_id' => $team_id,
                 'resolve_date' => $resolve_date,
                 'status_id' => $status_id,
                 'description' => $description
          ]);

Фактически вам необходим только один массив с ключами и значениями. для просмотра обновленной модели.

[РЕДАКТИРОВАТЬ 1]

Как сказано в комментариях в Laravel, вам необходимо позаботиться о соглашения об именах ,

Если название модели - TicketTracker, имя таблицы должно быть во множественном числе. Так что это будут ticket_trackers.

или если вы хотите иметь собственное имя для вашей таблицы, вы можете настроить в своей модели свойство $table следующим образом:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class TicketTracker extends Model
{
    protected $table = "other_table_name"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...