#php #laravel-8
#php #laravel-8
Вопрос:
Кто-нибудь может мне помочь? У меня ошибка при попытке прочитать свойство «id» в null Laravel 8 при попытке показать мою таблицу
Таблицы миграции
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('username', 20)->unique();
$table->string('password', 20);
$table->enum('level',['admin', 'manager', 'pegawai']);
$table->timestamps();
});
Schema::create('employees', function (Blueprint $table) {
$table->id();
$table->foreignId('id_user')
->constrained('users')
->onUpdate('cascade')
->onDelete('cascade');
$table->string('nama_pgw', 50);
$table->string('alamat');
$table->string('no_telp', 13);
$table->string('email', 30)->unique;
$table->timestamps();
});
Модель сотрудника
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Employee extends Model
{
use HasFactory;
protected $table = 'employees';
protected $fillable = ['nama_pgw', 'username', 'alamat', 'no_telp', 'email'];
public function user(){
return $this->hasOne(User::class);
}
}
Пользовательская модель
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
use HasFactory;
protected $table = 'users';
protected $fillable = ['username', 'password', 'level'];
public function employee(){
return $this->belongsTo(Employee::class, 'id_user', 'id');
}
}
Пользовательский контроллер
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;
use AppModelsUser;
class UserController extends Controller
{
public function index()
{
$users = User::get();
return view('user/index', compact('users'));
}
}
Контроллер сотрудника
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;
use AppModelsEmployee;
use AppModelsUser;
class PegawaiController extends Controller
{
public function index()
{
$pegawai = Employee::get();
return view('pegawai/index', compact('pegawai'));
}
}
Это мое мнение
<select name="id_user" id="username" class="uk-select">
<option>- pilih username -</option>
@foreach ($pegawai as $emp)
option value="{{$emp->users->id}}">{{$emp->users->nama_pgw}}</option>
@endforeach
</select>
Есть ли какие-либо проблемы с внешним ключом? Я продолжаю проверять возможность опечаток, но все кажется правильным.
Спасибо!
Комментарии:
1. вам нужно провести рефакторинг вашего кода, возможно, некоторые ошибки с опечатками и убедиться, что вы пытаетесь сделать с $ emp-> users ..??? где вы это определяете?
2. @Prospero $ emp определил $ pegawai на моем контроллере Employee для пользователей как таблицу внешних ключей.
3. Что вы пытались отладить проблему?
Ответ №1:
Ваше отношение в модели employee — «пользователь», в то время как вы ссылаетесь на него в блейд-представлении как «пользователи».
Кроме того, для запуска вашего кода вы можете обновить свое представление:
<select name="id_user" id="username" class="uk-select">
<option>- pilih username -</option>
@foreach ($pegawai as $emp)
<option value="{{$emp->user->id}}">{{$emp->user->nama_pgw}}</option>
@endforeach
</select>
Отредактировано:
Я также предложу оптимизировать ваш запрос с помощью быстрой загрузки. В вашем текущем коде он выполнит n 1 запросов, где 1 запрос для извлечения сотрудников и N запросов для извлечения пользователя для каждого сотрудника
Обновите его с помощью приведенного ниже кода:
class PegawaiController extends Controller
{
public function index()
{
$pegawai = Employee::with(['user'])->get();
return view('pegawai/index', compact('pegawai'));
}
}
Комментарии:
1. Это работает! Я думал, что «пользователи» в представлении блейда ссылаются на имя таблицы. Мне все еще нужно узнать больше. Спасибо!
2. @RadenBagus обновил мой ответ. Вы также можете оптимизировать его.