Лаварель запрос с условием - PullRequest
1 голос
/ 16 апреля 2020

У меня есть таблица / модель User со столбцом approved, которая является логическим значением.

У меня есть таблица / модель Post с внешним ключом user_id.

Отношения в модели Post:

public function user()
{
  return $this->belongsTo(
    User::class,
    'user_id'
  )->first();
}

Как я могу перечислить все Post s, которые получены из User s с утвержденным = true?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

вы можете сделать это двумя способами:

$users=User::where('approved', true)->get();

foreach ($users as $user) {
    $posts=Post::where('user_id', $user->id)->get();
}

или вы можете использовать join ()

$users=Users::where('approved', true)->join('posts', 'posts.user_id', '=', 
   'users.id')->get();

$posts=Post::join('users', 'users.id', '=', 
   'posts.user_id')->where('users.approved', true)->get();
0 голосов
/ 16 апреля 2020

Сначала исправьте ваши отношения в модели Post, замените их следующим образом:

public function user()
{
    return $this->belongsTo(User::class);
}

Подробнее об обратной связи отношения один-ко-многим можно прочитать здесь .

Затем вы можете использовать что-то вроде этого:

use Illuminate\Database\Eloquent\Builder;
use App\Post;

$posts = Post::whereHas('user', function (Builder $query) {
    $query->where('approved', 1);
})->get();

Это позволит получить все сообщения, у которых есть пользователь, для которого для утвержденного столбца установлено значение true.

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