Bonjour, j'ai un soucis avec mes relations laravel 8, je ne parviens pas à accéder aux données.
Comme un exemple est plus parlant qu'une longue explication :

J'ai un model Adherent et un model TypeVoie
Un adhérent ne peut avoir qu'un seule Type de voie mais un type de voie peut avoir plusieurs adhérents.

J'ai donc créé mes models comme suit :

Dans TypeVoie j'ai mis :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Kyslik\ColumnSortable\Sortable;

class TypeVoie extends Model
{
    use HasFactory;
    use Sortable;

    protected $table = 'chk_typevoie';
    protected  $primaryKey = 'TY_ID';

    public $timestamps = false;

     protected $fillable = [
        'TY_ID',
        ...
        ];
     public function adherents() : HasMany
     {
        return $this->hasMany(Adherent::class);
     }
}

Et dans Adherent j'ai mis :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Kyslik\ColumnSortable\Sortable;

class Adherent extends Model
{
    use HasFactory;
    use Sortable;

    public $timestamps = false;
    protected $table = 'chk_adherent';
    protected $primaryKey = 'AD_ID';

    protected $fillable = [
        'AD_ID',
        ...
        ];

     public function typeVoie()
     {
        return $this->belongsTo(TypeVoie::class);
     }
}

Et dans mon controller j'ai ce code :

  $ads = $this->adherentRepo->getPaginate($this->nbPerPage);
        foreach ($ads as $a) {                
                dd($a->typeVoie->TY_ID);
        }

Ce que je veux

Je voudrais qu'il m'affiche l'id du type de voie peut importe son numéro.

Ce que j'obtiens

Cependant j'obtiens l'erreur suivante:

Attempt to read property "TY_ID" on null 

Merci d'avance pour votre aide je ne comprends pas ce que je fais mal

1 réponse


Bien j'ai fini par trouver ma réponse.
Je la laisse ici on sait jamais ça pourrait aider quelqu'un.

Comme mes clé primaire ne sont pas "id" mais ont d'autres nom il a fallu que j'adapte mes déclarations de relation comme suit :

Pour le model Adhérent

 public function typeVoie1()
    {
        return $this->belongsTo(TypeVoie::class, 'AD_FK_TYPEVOIE_ID', 'TY_ID');
    }

Pour le model Type de voie

public function adherents() : HasMany
    {
        return $this->hasMany(Adherent::class, 'AD_FK_TYPEVOIE_ID', 'TY_ID');
    }

Ainsi mes relations fonctionnent dans les deux sens.

Enjoy