
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

mesa news

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 id
pero cuando trato de agregar el -> nombre allí dice Trying to get property of non-object but I have a field
nombrein my table and a
Modelo de usuario. ¿Me estoy perdiendo de algo?

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 (->).

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 belongsTo
desde
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.

Mehmet Buttün
Si trabaja con bucles o (for
, foreach
etc.) o relaciones (one to many
, many to many
etc.), 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>

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,

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

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