#php #mysql #eloquent #laravel-5.2 #relationship
#php #mysql #красноречивый #laravel-5.2 #взаимосвязь
Вопрос:
У меня есть две модели User
и Posts
- Пользователь: идентификатор, имя
- Сообщение: идентификатор, заголовок, сообщение, идентификатор пользователя
Я хочу проверить, имеет ли some user
posts
значение с given title
.
$user = User::find($userId);
$posts = $user->posts;
$postsWithGivenTitle = $posts->where('title','=',$title);
$postCount = $postsWithGivenTitle->count();
Я полагаю, что это должно сработать, но мне нужно пойти выше этого и сделать это эффективно. Итак, я получил это, и это работает, но все еще не уверен, правильно ли это сделать.
$user = User::find($userId)->withCount(['posts' => function ($q) use ($title) {
$q->where('title','=',$title);
}])->first();
а затем проверить количество:
if ($user->posts_count > 0) {
//do something
}
Что меня смущает и выглядит некрасиво, так это использование методов find()
и first()
в том же запросе. Так что, надеюсь, я здесь упускаю что-то простое и переосмысливаю это.
Спасибо
Ответ №1:
Как вы можете видеть в документах: https://laravel.com/docs/5.3/eloquent-relationships
Вы можете получить то, что хотите, следующим образом:
$user = User::withCount(['posts' => function($q){....}])->find($id)