Ответ 1
Является ли ваш запрос возвратом массива или объекта? Если вы сбросите его, вы можете обнаружить, что массив и все, что вам нужно, это доступ к массиву ([]) вместо доступа к объекту (- > ).
Я пытаюсь повторить имя пользователя в моей статье, и я получаю ErrorException: Trying to get property of non-object
. Мои коды:
Модели
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'];
}
Схема
table users
table news
контроллер
public function showArticle($slug)
{
$article = News::where('slug', $slug)->firstOrFail();
return view('article', compact('article'));
}
Клинок
{{ $article->postedBy->name }}
Когда я пытаюсь удалить имя в лезвии {{ $article->postedBy }}
, он выводит id
, но когда я пытаюсь добавить имя → там, он говорит Trying to get property of non-object
, но у меня есть поле name
в моей таблице и a User
. Я что-то пропустил?
Является ли ваш запрос возвратом массива или объекта? Если вы сбросите его, вы можете обнаружить, что массив и все, что вам нужно, это доступ к массиву ([]) вместо доступа к объекту (- > ).
Я заработал, используя ответ Джимми Зото и добавив второй параметр в мой belongsTo
. Вот он:
Сначала, как предложил Джимми Зото, мой код в лезвии от $article->poster->name
до $article->poster['name']
. Далее следует добавить второй параметр в моем belongsTo
, от return $this->belongsTo('App\User');
, чтобы вернуть $this->belongsTo('App\User', 'user_id');
, в котором user_id
- мой внешний ключ в таблице новостей.
Спасибо за вашу помощь!
Я применил отношение hasOne
в моем родительском классе, определяющее как внешний, так и локальный ключ, он возвратил объект, но к ним нужно обращаться как к столбцам дочернего элемента.
т.е. $parent->child['column']
Вид запутанности.
Случилось так, что через некоторое время нам нужно бежать
'php artisan passport:install --force
снова сгенерировать ключ это решило мою проблему,
Если вы работаете с циклами или (for
, foreach
и т.д.) Или отношениями (one to many
, many to many
и т.д.), Это может означать, что один из запросов возвращает переменную null
или null
участник отношений.
Например,: в таблице вы можете перечислить users
с их 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>
В приведенном выше случае вы можете получить эту ошибку, если хотя бы один пользователь не имеет роли. Вам следует заменить {{ $user->role->name }}
на {{ !empty($user->role) ? $user->role->name:'' }}
следующим образом:
<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>
У меня была и эта проблема. Добавьте код, как показано ниже, в соответствующий контроллер (например, UserController)
$users = User::all();
return view('mytemplate.home.homeContent')->with('users',$users);
Laravel необязательный() Помощник приходит, чтобы решить эту проблему. Попробуйте этот помощник, чтобы, если какой-либо ключ не имел значения, он не возвращал ошибку
foreach ($sample_arr as $key => $value) {
$sample_data[] = array(
'client_phone' =>optional($users)->phone
);
}
print_r($sample_data);