Как получить имя пользователя от объекта в Laravel - PullRequest
0 голосов
/ 21 мая 2019

Я новичок в Laravel, и у меня есть следующие миграции.

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('company_id')->unsigned();
    $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade');
    $table->boolean('enable')->default(0);
    $table->string('name', 120)->nullable();
    $table->string('surname', 120)->nullable();
    $table->string('email', 120)->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->boolean('enable_map')->default(0);
    $table->rememberToken();
    $table->timestamps();
    $table->engine = "InnoDB";
});

Schema::create('comments', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->Integer('rating');
    $table->text('content');
    $table->dateTime('date_time');
    $table->string('ip', 25);
    $table->engine = "InnoDB";
});

User.php

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
    use psCMS\Presenters\UserPresenter;

    public static $roles = [];

    protected $fillable = ['company_id', 'enable', 'name', 'surname', 'email', 'email_verified_at', 'password', 'counter', 'url_address',  'isCompany', 'isMailing', 'content', 'nip1', 'business1', 'phone1', 'street1', 'number1', 'postal_code1', 'city1', 'country_id1', 'provincial_id1', 'nip2', 'business2', 'phone2', 'street2', 'number2', 'postal_code2', 'city2', 'country_id2', 'provincial_id2', 'nip3', 'business3', 'phone3', 'street3', 'number3', 'postal_code3', 'city3', 'country_id3', 'provincial_id3', 'cash', 'lng', 'lat', 'enable_map', 'remember_token', 'created_at', 'updated_at', 'last_login_at', 'last_login_ip' ];

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

    public function photos()
    {
        return $this->morphMany('App\Photo', 'photoable');
    }

    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }

    public function comments()
    {
        return $this->hasMany('App\Comments');
    }

    public function hasRole(array $roles)
    {
        foreach($roles as $role)
        {
            if(isset(self::$roles[$role]))
            {
                if(self::$roles[$role])  return true;

            } else {
                self::$roles[$role] = $this->roles()->where('name', $role)->exists();
                if(self::$roles[$role]) return true;
            }

        }

        return false;
    }

    public function loginHistory()
    {
        return $this->hasMany('App\UserLoginHistory');
    }
}

Comments.php

class Comments extends Model
{
    protected $quarded = [];
    public $timestamps = false;

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

Когда я создаю этот код:

Comments::where('content','LIKE','%'.$query.'%')->orWhere('id','LIKE','%'.$query.'%')->orderBy($sortColumn, $sortMethod)->paginate(25);

У меня нет информации о пользователе.У меня есть только значения из комментариев.Почему Как я могу получить информацию о пользователе, который добавляет эти комментарии?Я хотел бы отобразить список комментариев вместе с информацией о пользователе.

Ответы [ 3 ]

2 голосов
/ 21 мая 2019
  1. В качестве лучшей практики имя класса должно принимать форму имени таблицы в единственном числе. Вы можете прочитать об этом на https://laravel.com/docs/5.8/eloquent#defining-models.

  2. Вы должны иметь возможность получить доступ к отношениям user(), загрузив их с помощью with().

$comments = Comments::with('user')
                ->where('content','LIKE','%'.$query.'%')
                ->orWhere('id','LIKE','%'.$query.'%')
                ->orderBy($sortColumn, $sortMethod)->get();

                // or paginate method

  1. То, что вы извлекаете, является коллекцией. Таким образом, вам придется перебрать comments, чтобы получить user объект
foreach($comment in $comments){
    $userObj = $comments->user;
    $email = $userObj->email;
    //...etc here
}
2 голосов
/ 21 мая 2019

У меня нет информации о пользователе. У меня есть только значения из комментариев. Почему?

Потому что вы делаете запрос только по модели. Комментарии

Как я могу получить информацию о пользователе, который добавил этот комментарий?

Добавить пользователя к запросу:

$comments_with_user_info = Comments::with('user')->where('content','LIKE','%'.$query.'%')->orWhere('id','LIKE','%'.$query.'%')->orderBy($sortColumn, $sortMethod)->paginate(25);

Я бы хотел отобразить список комментариев вместе с информацией о пользователе.

Вы можете получить имя таким образом (например, в клинке):

@foreach($comments_with_user_info as $comment)
    {{ $comment->user->name }}
@endforeach
0 голосов
/ 21 мая 2019

Комментарии :: с ( 'пользователя') -> где ( 'содержания', 'LIKE', '%' $ запроса '%'..) -> orWhere ( 'ид', 'LIKE', '%' . $ query. '%') -> orderBy ($ sortColumn, $ sortMethod) -> paginate (25);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...