Tengo una tabla / modelo User con una columna approved, que es un booleano.

Tengo una tabla / modelo Post, con una clave externa user_id.

Relación dentro del modelo Post:

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

¿Cómo puedo enumerar todos los Post s que provienen de User s con aprobado = verdadero?

1
user3421985 16 abr. 2020 a las 15:12

2 respuestas

La mejor respuesta

Primero arregle su relación en el modelo Post, cámbielo a lo siguiente:

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

Puede leer más sobre el inverso de la relación uno a muchos aquí.

Entonces puedes usar algo como esto:

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

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

Esto obtendrá todas las publicaciones que tengan un usuario donde la columna aprobada esté establecida en true.

Puede leer más sobre whereHas aquí .

0
Remul 16 abr. 2020 a las 12:50

Puedes hacer esto de 2 maneras:

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

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

O puedes usar 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();
1
Hossein 16 abr. 2020 a las 12:44