Tratando de obtener la propiedad de un no objeto – Laravel 5

5 minutos de lectura

Tratando de obtener la propiedad de un no objeto
wobsoriano

Estoy tratando de hacer eco del nombre del usuario en mi artículo y obtengo el

ErrorException: tratando de obtener la propiedad de un no objeto

Mis codigos:

Modelos

1. News

    class News extends Model
    {
      public function postedBy()
      {
         return $this->belongsTo('App\User');
      }
      protected $table="news";
      protected $fillable = ['newsContent', 'newsTitle', 'postedBy'];
    }

2. User

    class User extends Model implements AuthenticatableContract,
                                AuthorizableContract,
                                CanResetPasswordContract
    {
        use Authenticatable, Authorizable, CanResetPassword;

        protected $table="users";

        protected $fillable = ['name', 'email', 'password'];

        protected $hidden = ['password', 'remember_token'];

    }

Esquema

mesa users

ingrese la descripción de la imagen aquí

mesa news

ingrese la descripción de la imagen aquí

Controlador

public function showArticle($slug)
    {
        $article = News::where('slug', $slug)->firstOrFail();
        return view('article', compact('article'));
    }

Espada

{{ $article->postedBy->name }}

Cuando trato de quitar el nombre en la hoja {{ $article->postedBy }} da salida a la idpero cuando trato de agregar el -> nombre allí dice Trying to get property of non-object but I have a field nombrein my table and aModelo de usuario. ¿Me estoy perdiendo de algo?

  • Puedes print_r($article);?

    – aldrin27

    9 de septiembre de 2015 a las 1:30

  • @ aldrin27 print_r directamente en mi controlador? bueno, en realidad todo funciona, obtengo todos los campos pero no puedo obtener la relación. me da el error

    – wobsoriano

    9 de septiembre de 2015 a las 1:37

  • Necesitas buscar eso dentro de tu hoja.

    – aldrin27

    9 de septiembre de 2015 a las 1:38

  • @ aldrin27 incluso si uso foreach sigo recibiendo el mismo error

    – wobsoriano

    9 de septiembre de 2015 a las 1:44

  • Tienes mesa pivote?

    – aldrin27

    9 de septiembre de 2015 a las 1:44

1646760249 439 Tratando de obtener la propiedad de un no objeto
jimmy zoto

¿Su consulta está devolviendo una matriz u objeto? Si lo descarga, es posible que descubra que es una matriz y todo lo que necesita es un acceso a la matriz ([]) en lugar de un acceso a objeto (->).

  • que pasa si quiero usar $article->poster-name en lugar de $article->poster['name']

    – Martín Cristóbal

    23 de julio de 2019 a las 3:28

  • simplemente transfiéralo al objeto en el modelo del artículo. ej: $emisiones = [‘poster’ => ‘object’]

    – shoxton

    16 mayo 2021 a las 13:43


Tratando de obtener la propiedad de un no objeto
wobsoriano

Lo hice funcionar usando la respuesta de Jimmy Zoto y agregando un segundo parámetro a mi belongsTo. Aquí lo tienes:

Primero, como sugirió Jimmy Zoto, mi código en Blade de

$article->poster->name 

para

$article->poster['name']

Lo siguiente es agregar un segundo parámetro en mi belongsTodesde

return $this->belongsTo('App\User');

para

return $this->belongsTo('App\User', 'user_id');

en el cual user_id es mi clave foránea en la tabla de noticias.

  • también debe verificar si hay una entrada en la tabla con isset()

    – Daniel Juric

    14 de marzo de 2021 a las 23:22

1646760249 708 Tratando de obtener la propiedad de un no objeto
Mehmet Buttün

Si trabaja con bucles o (for, foreachetc.) o relaciones (one to many, many to manyetc.), esto puede significar que una de las consultas está devolviendo un null variable o una null miembro de la relación.

Por ejemplo: En una tabla, es posible que desee enumerar users con su roles.

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->name }}</td>
        <td>{{ $user->role->name }}</td>
    </tr>
    @endforeach
</table>

En el caso anterior, puede recibir este error si hay incluso un usuario que no tiene un rol. deberías reemplazar {{ $user->role->name }} con {{ !empty($user->role) ? $user->role->name:'' }}Me gusta esto:

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->name }}</td>
        <td>{{ !empty($user->role) ? $user->role->name:'' }}</td>
    </tr>
    @endforeach
</table>

Editar: Puedes usar el de Laravel optional método para evitar errores (más información). Por ejemplo:

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->name }}</td>
        <td>{{ optional($user->role)->name }}</td>
    </tr>
    @endforeach
</table>

Si está usando PHP 8, puede usar el null safe operator:

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user?->name }}</td>
        <td>{{ $user?->role?->name }}</td>
    </tr>
    @endforeach
</table>

  • ¿Qué pasa si no quiero usar si en la hoja? ¿Hay un método mejor por ahí?

    – Ali Lashini

    4 de junio de 2020 a las 10:24

  • Puede elegir matrices en lugar de colecciones.

    – Mehmet Buttün

    04/06/2020 a las 23:50

  • @AliLashini Puede usar el operador coalescente nulo (se requiere PHP 7.0). $user->role->name ?? 'No Role'. Imprimirá el nombre de la función del usuario o ‘Sin función’ cuando el usuario no tenga una relación de función. es lo mismo que isset($user->role->name) ? $user->role->name : 'No Role'.

    – ibnɘꟻ

    2 de octubre de 2020 a las 7:24


1646160316 489 file put contents no se pudo abrir la transmision Permiso denegado
bruce tong

implementé un hasOne La relación en mi clase principal, definió tanto la clave externa como la local, devolvió un objeto pero se debe acceder a las columnas del elemento secundario como una matriz.
es decir $parent->child['column']

Algo confuso.

Sucede que después de un tiempo necesitamos correr

 'php artisan passport:install --force 

nuevamente para generar una clave esto resolvió mi problema,

1646760250 903 Tratando de obtener la propiedad de un no objeto
ParisaN

Yo también tuve este problema. Agregue código como el siguiente en el controlador relacionado (por ejemplo, UserController)

$users = User::all();
return view('mytemplate.home.homeContent')->with('users',$users);

1646760251 613 Tratando de obtener la propiedad de un no objeto
Ajay

Laravel Optional() Helper viene a resolver este problema. Pruebe este asistente para que si alguna clave no tiene valor, no devuelva el error

foreach ($sample_arr as $key => $value) {        
      $sample_data[] = array(       
        'client_phone' =>optional($users)->phone        
      );
    }
 print_r($sample_data);

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad