Как мне прочитать данные базы данных из пользовательского класса по умолчанию в Laravel?

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