Call to a member function first() on null
Ошибка заключается в том что из ресурса приходил 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
Источник: Stack Overflow на русском