Как получить прошлые комментарии пользователя? Колонка не найдена ошибка - PullRequest
0 голосов
/ 08 мая 2018

У меня есть UserController, у которого есть метод index (), который должен получать все прошлые комментарии в сообщениях пользователя и для каждого комментария получать подробности сообщения (заголовок и дата). Итак, у меня есть код ниже, чтобы получить прошлые комментарии пользователя:

$pastComments = $user->comments()->with('post')->where('create_date', '<', now())->get();

Дата создания - это поле таблицы сообщений, а не таблицы комментариев.

Но появляется ошибка:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'create_date' in 'where clause' (SQL: select * from `comments` where `comments`.`user_id` = 1 and `comments`.`user_id` is not null and `create_date` < 2018-05-08 15:04:47)".

Ты знаешь почему?

Модель:

class User extends Authenticatable
{
    public function posts(){
        return $this->hasMany('App\Post', 'user_id');
    }
    public function comments(){
        return $this->hasMany('App\Comment','user_id');
    }
}

class Comment extends Model
{
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function post(){
        return $this->belongsTo('App\Post');
    }

}


class Post extends Model
{
    public function admin(){
        return $this->belongsTo('App\User', 'user_id');
    }
    public function comments(){
        return $this->hasMany('App\Comment', 'post_id');
    }
}

Структура таблиц:

Users table: id, name, ...
Comments table: id, post_id, user_id, ...
Posts table: id, name, user_id, ...

С:

$comments = $user->comments()->with('post')->whereHas(['post' => function ($query) {$query->where('create_date', '<', now()); }])->get();

Похоже:

  strpos() expects parameter 1 to be string, array given

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

сдерживающие активные нагрузки

$pastComments = $user->comments()->with(['post' => function ($query) {
    $query->where('create_date', '<', now());
}])->get();
0 голосов
/ 08 мая 2018

Если вы хотите охватить запрос по его взаимосвязи, вам нужно будет использовать whereHas, например,

$pastComments = $user->comments()->with('post')
        ->whereHas('posts', function ($query) {
            $query->where('create_date', '<', now());
        })
        ->get();

https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence

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