Превышено максимальное время выполнения при использовании отношения отношение к ToMany с Eloquent - PullRequest
0 голосов
/ 09 октября 2019
  • Версия Laravel: 6.1.0
  • Версия PHP: PHP 7.2.19-0ubuntu0.18.04.2 (cli)
  • Драйвер и версия базы данных: PostgreSQL 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1)

Описание: После вставки данных в промежуточную таблицуданные не возвращаются в запросе. Возникает следующая ошибка:

{
    "message": "Maximum execution time of 30 seconds exceeded",
    "exception": "Symfony\\Component\\Debug\\Exception\\FatalErrorException",
    "file": "/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php",
    "line": 604,
    "trace": []
}

Чтобы эта ошибка произошла, достаточно, чтобы в базу данных была вставлена ​​только 1 запись.

Шаги для воспроизведения: СозданиеБазовая модель отношения многих ко многим. Создайте метод с помощью find и с помощью

Пример:

  • Модель Sepultura.php
<?php

namespace App;

class Sepultura extends Model
{
    protected $table = 'sepulturas';

    protected $fillable = ['lote', 'lote_anterior', 'quadra', 'quadra_anterior'];

    protected $appends = ['proprietario_list'];

    public function proprietarios()
    {
        return $this->belongsToMany('App\Proprietario', 'proprietarios_sepulturas', 'sepultura_id', 'proprietario_id')->withTimestamps();
    }

   public function getProprietarioListAttribute()
    {
        return array_map('strval', $this->proprietarios->pluck('id')->toArray());
    }
}
  • МодельProprietario.php
<?php

namespace App;

class Sepultura extends Model
{
    protected $table = 'proprietarios';

    protected $fillable = ['nome', 'rg', 'cpf', 'telefone', 'email'];

    protected $appends = ['sepultura_list'];

    public function sepulturas()
    {
        return $this->belongsToMany('App\Sepultura', 'proprietarios_sepulturas', 'proprietario_id', 'sepultura_id')->withTimestamps();
    }

    public function getSepulturaListAttribute()
    {
        return array_map('strval', $this->sepulturas->pluck('id')->toArray());
    }
}
  • Контроллер ProprietariosController.php
<?php

namespace App\Http\Controllers;

use App\Proprietario;

class ProprietariosController extends Controller
{
    private $proprietario;

    public function __construct(Proprietario $proprietario)
    {
        $this->proprietario = $proprietario;
    }

    public function show($id)
    {
        $proprietario = $this->proprietario->with('sepulturas')->find($id);

        if(count($proprietario->toArray()) > 0)
            return response()->json($proprietario);

        return response()->json(['error' => 'Resource not found!'], 404);
    }
}

Метод show просто выдает ошибку Максимальное время выполнения превысило , когда что-то вставлено в таблицу proprietarios_sepulturas .

У меня есть идеальный код, работающий на Laravel 5.8.

Как решить эту проблему? !

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...