Call to a member function first() on null

Рейтинг: 0Ответов: 0Опубликовано: 22.07.2023

Ошибка заключается в том что из ресурса приходил null, только я понятия не имею почему так Код с ошибкой на этой строке

'halls' => HallResource::collection($this->hallsALL)

<?php

namespace App\Http\Resources;

use App\Models\Hall;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class SessionResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            ...parent::toArray($request),
            'times' => $this->time,
            'halls' => HallResource::collection($this->hallsALL),
            // 'halls' => Hall::all(),
        ];
    }
}

HallResource

<?php

namespace App\Http\Resources;

use App\Models\HallGenerator;
use App\Models\Session;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class HallResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request)
    {
        return [
            ...parent::toArray($request), 
            $this->hall_id,
            // 'sessions' =>  Session::all(),
            // 'sessionsCheck' => SessionResource::collection($this->sessions),
        ];
    }
}

Код контроллера с ссылкой где происходит ошибка FilmListController.php

<?php

namespace App\Http\Controllers\Pages;

use App\Models\Film;
use Inertia\Inertia;
use Inertia\Response;
use App\Models\Hall;
use App\Http\Resources\FilmResource;
use App\Http\Resources\HallResource;
use App\Http\Resources\SessionResource;
use App\Models\Session;

class FilmListController
{
    public function __invoke(Film $film, Hall $hall, Session $session): Response
    {
        return Inertia::render('films/[id]', [
            'sessions' => SessionResource::make($session),
            'sessionALL' => Session::all(),
            'film' => FilmResource::make($film),
            'halls' => HallResource::make($hall),
            'hallsALL' => Hall::all(),
        ]);
    }
}

Миграции таблиц

Sessions

<?php

use App\Models\Film;
use App\Models\Hall;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::create('sessions', function (Blueprint $table) {
            $table->id();
            $table->foreignIdFor(Film::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate();
            $table->foreignIdFor(Hall::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate();
            $table->text('time');
            $table->timestamps();
        });
    }
};

Halls

<?php

use App\Models\HallGenerator;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('halls', function (Blueprint $table) {
            $table->id();
            $table->foreignIdFor(HallGenerator::class)->constrained()->cascadeOnDelete()->cascadeOnUpdate();
            $table->timestamps();
        });
    }
};

Hall_Generators таблица для имени кинозала

<?php

use App\Models\Hall;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('hall_generators', function (Blueprint $table) {
            $table->id();
            $table->text('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('hall_generators');
    }
};

Модели таблиц

Session

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Session extends Model
{
    use HasFactory;

    protected $fillable = [
        "film_id",
        "hall_id",
        "time"
    ];

    /**
     * film -> session
     * hall -> session
     * @return BelongsTo
     */
    public function film()
    {
        return $this->belongsTo(Film::class);
    }

    public function hall()
    {
        return $this->belongsTo(Hall::class);
    }


}

Hall

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Hall extends Model
{
    use HasFactory;

    protected $fillable = [
        "hall_generator_id"
    ];

    public function film()
    {
        return $this->belongsTo(Film::class);
    }

    public function session()
    {
        return $this->hasMany(Session::class);
    }

    public function hallGenerator()
    {
        return $this->hasMany(HallGenerator::class);
    }

    public function hallInfo()
    {
        return $this->belongsTo(HallInfo::class);
    }
}

HallGenerator

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

class HallGenerator extends Model
{
    use HasFactory;

    protected $fillable = [
        "name"
    ];

    public function hall()
    {
        return $this->belongsTo(Hall::class);
    }
}

Вот ссылка на git если вдруг кому удобнее https://github.com/chikbob/abobacinema

Ответы

Ответов пока нет.