#laravel #class #model
#laravel #класс #Модель
Вопрос:
Когда я использую следующий код в моем routes/web.php файл, я продолжаю получать сообщение об ошибке «Попытка получить свойство не-объекта» каждый раз, когда я посещаю URL-адрес /user/{id}/post.
routes/web.php
use AppPost;
use AppUser;
Route::get('/user/{id}/post', function($id) {
return User::find($id)->name;
});
App/User.php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function posts() {
return $this->hasOne('Post');
}
}
App/Post.php
namespace App;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;
class Post extends Model
{
// protected $table = 'posts';
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = [''];
}
Как мне просмотреть данные, хранящиеся в таблице users? Я поместил туда некоторые фиктивные данные, чтобы попытаться извлечь их.
Ответ №1:
Если пользователь имеет одно отношение к Post, лучше установить отношение post()
, а не posts()
и post принадлежит пользователю.
Модель пользователя:
public function post() {
return $this->hasOne('AppPost');
}
Модель Post:
public function user()
{
return $this->belongsTo('AppUser');
}
затем это дает все сообщения пользователя вместе с именем пользователя.
$users=User::with('post')->get();
foreach($users as $user)
{
print_r($user->name);
print_r($user->post);
}