web-dev-qa-db-fra.com

Propriété non définie: Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ name laravel 5.4

Salut, voici mes relations

modèle utilisateur

   public function loginlogout()
    {
        $this->HasMany("App\Models\LoginLogoutLogs");
    }

et c'est mon LoginLogoutLogs Model

  public function users()
    {
        return $this->belongsTo('App\Models\User');
    }

J'essaie d'accéder au nom des utilisateurs comme celui-ci

 $loginLogoutLogs = LoginLogoutLogs::all();
        foreach($loginLogoutLogs as $loginLogoutLog){
            dd($loginLogoutLog->users()->name);
        }

mais je reçois cette erreur

Propriété non définie: Illuminate\Database\Eloquent\Relations\BelongsTo :: $ name

MODIFIER l'ajout de modèles

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use Session;
use Illuminate\Support\Facades\DB;

class User extends Authenticatable
{
    use Notifiable;
    use EntrustUserTrait;

    protected $table = 'tbl_users';
    protected $primaryKey = 'id';
    protected $guarded = ['id'];
    const API = 'api';
    const WEB = 'web';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'last_login', 'Address', 'Age', 'DateOfBirth', 'created_by', 'deleted_by'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $casts = [
        'is_admin' => 'boolean',
    ];

    public function isAdmin()
    {
        return $this->is_admin;
    }

    static function GetUserNamebyID($id)
    {
        $name = User::select("name")->where(["id" => $id])->pluck('name');
        if (isset($name[0])) {
            return $name[0];
        } else {
            return '';
        }
    }



    public function loginlogout()
    {
        $this->HasMany("App\Models\LoginLogoutLogs", 'userID');
    }

    public function company()
    {
        $this->HasMany("App\Models\Company");
    }
}

Et maintenant LoginLogouts Model

<?php


namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use Illuminate\Database\Eloquent\Model;
use Session;
use Illuminate\Support\Facades\DB;

class LoginLogoutLogs extends Model
{
    use Notifiable;
    use EntrustUserTrait;

    protected $table = 'tbl_users_logs';
    protected $primaryKey = 'id';
    protected $guarded = ['id'];
    const API = 'api';
    const WEB = 'web';


    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'userID','is_accpeted','type','addedFrom'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    protected $casts = [
        'is_admin' => 'boolean',
    ];

    public function isAdmin()
    {
        return $this->is_admin;
    }

    // change company to hasmany

    public function user()
    {
        return $this->belongsTo('App\Models\User');
    }

}
6
noobie-php

changez simplement votre partie de

dd($loginLogoutLog->users()->name);

dans

dd($loginLogoutLog->users->name);

retirez le support sur les utilisateurs, c'est la solution facile. ici nous obtenons une propriété, pas une fonction .... (bien que dans le modèle sa définie comme fonction)

16
Toni Tegar Sahidi

Solution facile:

$loginLogoutLogs = LoginLogoutLogs::all();
foreach($loginLogoutLogs as $loginLogoutLog){
    dd($loginLogoutLog->users->name);
}

Vous souhaitez accéder aux entités de relation, par opposition au modèle de relation.

En utilisant users(), votre code pense que vous essayez d'appeler une méthode name() sur le modèle users, par opposition à votre méthode users sur la LoginLogoutLogs classe.

4
James

Vous devez modifier votre relation avec l'utilisateur en ajoutant la clé étrangère dans LoginLogoutLogs:

public function user()
{
    return $this->belongsTo('App\Models\User', 'userID');
}

Assurez-vous également que vous appelez l'utilisateur en fonction des utilisateurs

$loginLogoutLogs = LoginLogoutLogs::all();
foreach($loginLogoutLogs as $loginLogoutLog){
    dd($loginLogoutLog->user->name);
}

Et si vous souhaitez effectuer un chargement rapide:

$loginLogoutLogs = LoginLogoutLogs::with('user')->get();
foreach($loginLogoutLogs as $loginLogoutLog){
    dd($loginLogoutLog->user->name);
}
3
Nerea