Maison  >  Questions et réponses  >  le corps du texte

La relation dans la table de données est vide

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粉704196697P粉704196697178 Il y a quelques jours268

répondre à tous(2)je répondrai

  • P粉419164700

    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);

    répondre
    0
  • P粉156415696

    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.

    répondre
    0
  • Annulerrépondre