Свойство [libelle_metier] не существует в этом экземпляре коллекции - PullRequest
0 голосов
/ 02 июля 2018

У меня есть функция, которая отображает идентификатор выбора 'technicien', и он показал свое имя из таблицы user и там 'metier' techniciens_tables

Schema::create('techniciens', function (Blueprint $table) {
    $table->increments('id');
    $table->boolean('actif')->default(1);
    $table->float('moyenne_avis')->nullable();
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    $table->datetime('deleted_at')->nullable();
    $table->timestamps();

});

metier_tables

Schema::create('metiers', function (Blueprint $table) {
        $table->increments('id');
        $table->string('libelle_metier');
        $table->datetime('deleted_at')->nullable();
        $table->timestamps();
    });

users_table

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('email');
        $table->string('password');
        $table->string('nom');
        $table->string('prenom');
        $table->string('tel');
        $table->string('mobil');
        $table->boolean('role')->default(0);
        $table->datetime('deleted_at')->nullable();
        $table->rememberToken();
        $table->timestamps();
    });

техническая модель

public function  user()
{
    return $this->belongsTo(User::class);
}

public function metier()
{
    return $this->belongsToMany('App\metier','technicien_metier', 
    'technicien_id','metier_id');

}

модель Метиер

 public function techniciens()
{
    return $this->belongsToMany('App\technicien','technicien_metier', 
    'metier_id','technicien_id');

}

У меня есть эта функция в моем техническом контроллере

 public function GetTables($id)
{
    $technicien = Technicien::with('user','metier')->find($id);
    $metier = $technicien->metier;
    return [
            'id' => $technicien->id,
            'actif' => $technicien->actif,
            'nom' => $technicien->user->nom,
            'prenom' => $technicien->user->prenom,
            'metier' => $metier->libelle_metier,
    ];
}

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Здесь $metier - это экземпляр коллекции, либо вы зациклите его с помощью foreach, либо получите значение с помощью метода Collection first или pluck, например,

public function GetTables($id)
{
    $technicien = Technicien::with('user','metier')->find($id);
    $metier = $technicien->metier;
    return [
            'id' => $technicien->id,
            'actif' => $technicien->actif,
            'nom' => $technicien->user->nom,
            'prenom' => $technicien->user->prenom,
            'metier' => $metier->first()->libelle_metier,
    ];
}

OR

public function GetTables($id)
{
    $technicien = Technicien::with('user','metier')->find($id);
    $metier = $technicien->metier;
    return [
            'id' => $technicien->id,
            'actif' => $technicien->actif,
            'nom' => $technicien->user->nom,
            'prenom' => $technicien->user->prenom,
            'metier' => $metier->pluck('libelle_metier')->all(), //it will give you an array
    ];
}

Детали для коллекции https://laravel.com/docs/5.6/collections#method-pluck

0 голосов
/ 02 июля 2018

большее отношение к модели Technicien. Сначала исправьте имя вашего отношения

public function metiers()
{
    return $this->belongsToMany('App\metier','technicien_metier', 
    'technicien_id','metier_id');
}

затем

public function GetTables($id)
{
    $technicien = Technicien::with('user','metiers')->find($id);
    $metiers = $technicien->metiers;
    return [
        'id' => $technicien->id,
        'actif' => $technicien->actif,
        'nom' => $technicien->user->nom,
        'prenom' => $technicien->user->prenom,
        'metier' => $metiers->pluck('libelle_metier')->all(),
        // or 'metier' => !empty($metiers->first()) ? $metiers->first()->libelle_metier : 'no metier';
    ];
}
0 голосов
/ 02 июля 2018

Очевидно, что ваши отношения возвращаются с нулевым значением $metier = $technicien->metier;, поскольку отношения отсутствуют, поэтому вы можете сделать:

 public function GetTables($id)
{
    $technicien = Technicien::with('user','metier')->find($id);
    $metier = $technicien->metier;
    return [
            'id' => $technicien->id,
            'actif' => $technicien->actif,
            'nom' => $technicien->user->nom,
            'prenom' => $technicien->user->prenom,
            'metier' => isset($metier->libelle_metier) ? $metier->get()->pluck('libelle_metier') : null,
    ];
}

Или настройте ваш запрос так, чтобы он получал только технику, которая имеет следующий вид:

$technicien = Technicien::whereHas('user','metier')->find($id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...