У меня две таблицы:
- ForumPost , со структурой:
+---------+---------+
| id | message |
+---------+---------+
ForumPostVote , со структурой:
+---------+---------+---------+
| id | post_id | user_id |
+---------+---------+---------+
Вот два моих модельных класса для каждого:
- ForumPost. php
class ForumPost extends Model
{
protected $with = [
'userVote'
];
public function votes()
{
return $this->hasMany('App\ForumPostVote', 'post_id', 'id');
}
public function userVote()
{
if (Auth::check())
{
return $this->hasOne('App\ForumPostVote', 'post_id', 'id')->where('user_id', Auth::user()->id)->select('id');
}
return null;
}
}
ForumPostVote. php class ForumPostVote extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
public function post()
{
return $this->belongsTo('App\ForumPost', 'id', 'post_id');
}
}
Как видите, в ForumPost. php у меня есть функция userVote()
где я пытаюсь выбрать id
из ForumPostVote , где идентификатор пользователя совпадает с зарегистрированным пользователем.
Когда я делаю запрос, он возвращает null
. Если я удалю ->select('id')
, он вернет объект как обычно:
"user_vote": {
"id": 1,
"post_id": 1,
"user_id": 1
}
Если я попробую что-то вроде:
public function userVote()
{
if (Auth::check())
{
$query = $this->hasOne('App\ForumPostVote', 'post_id', 'id')->where('user_id', Auth::user()->id);
return $query->id;
}
return null;
}
Если я это сделаю:
public function userVote()
{
if (Auth::check())
{
return $this->hasOne('App\ForumPostVote', 'post_id', 'id')->where('user_id', Auth::user()->id)->select(['id', 'post_id']);
}
return null;
}
Это возвращает:
"user_vote": {
"id": 1,
"post_id": 1
}
Но это не то, что я хочу. Я только хочу id
.
Что я делаю не так?