Maison > Questions et réponses > le corps du texte
Je reçois cette erreur dans DataTables : Avertissement DataTables : table id=DataTables_Table_0 - Message d'exception :
Essayer de lire la propriété nulle "nom".
Bien que chaque position_id ait un identifiant de la table de position, il ne doit donc pas être vide. Si quelqu'un souhaite aider, je lui en serais reconnaissant. Mon modèle :
public function position() { return $this->belongsTo(Position::class); }
Ma manette :
class EmployeeController extends Controller { public function index(Request $request) { if ($request->ajax()) { $data = Employee::with('position')->select('id','name','email')->get(); return Datatables::of($data)->addIndexColumn() ->addColumn('position', function (Employee $employee) { return $employee->position->name; })->addColumn('action', function($data){ $button = '<button type="button" name="edit" id="'.$data->id.'" class="edit btn btn-primary btn-sm"> <i class="bi bi-pencil-square"></i>Edit</button>'; $button .= ' <button type="button" name="edit" id="'.$data->id.'" class="delete btn btn-danger btn-sm"> <i class="bi bi-backspace-reverse-fill"></i> Delete</button>'; return $button; }) ->make(true); } return view('admin.employees.index'); } }
Script :
$(document).ready(function() { var table = $('.user_datatable').DataTable({ processing: true, serverSide: true, ajax: "{{ route('admin.employees.index') }}", columns: [ {data: 'id', name: 'id'}, {data: 'name', name: 'name'}, {data: 'email', name: 'email'}, {data: 'position', name: 'position.name'}, {data: 'action', name: 'action', orderable: false, searchable: false}, ] });
Migrer :
public function up() { Schema::create('employees', function (Blueprint $table) { $table->id(); $table->string('name'); $table->foreignId('position_id')->nullable(); $table->string('phone_number'); $table->date('recruitment_date'); $table->string('email')->unique(); $table->string('image_path')->nullable(); $table->string('payment'); $table->timestamps(); $table->string('admin_created_id')->nullable(); $table->string('admin_updated_id')->nullable(); }); }
P粉4191647002024-03-29 16:57:08
Cette erreur se produit lorsqu'un Datatable tente de récupérer des données à partir d'une $data
获取数据时,没有集合或数组将其定位在 get()
méthode
{ collection[0]{ 0 => 'Models/Employees'[0], 1 => 'Models/Employees'[1] }
Donc, quand vous regardez $raw
le retour ci-dessus n'a ni position ni attribut
À partir de là, nous changerons le contrôleur pour qu'il ressemble à ceci
public function index(Request $request) { if ($request->ajax()) { $data = Employee::query()->with('position')->select('id','name','email')->get(); return Datatables::of($data)->addIndexColumn() ->addColumn('position', function (Employee $employee) { return $employee->position->name; })->addColumn('action', function($data){ $button = ''; $button .= ' '; return $button; }) ->make(true); } return view('admin.employees.index'); }
Si cela ne fonctionne pas, vous pouvez essayer de modifier la requête de la base de données
Mais pour cela, je dois vider $data. Vous pouvez voir le résultat dans la section Réseau de l'élément Inspect de votre navigateur.
dd($data);
P粉1564156962024-03-29 13:49:48
Le problème vient du choix. Il semble que si vous souhaitez utiliser des relations, vous devez ajouter une clé étrangère à la sélection (dans mon cas "position_id"), ou la supprimer complètement et utiliser simplement get . Merci à tous ceux qui ont aidé dans les commentaires.