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?
2 respuestas
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í .
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();
Preguntas relacionadas
Nuevas preguntas
laravel
Laravel es un marco web PHP gratuito y de código abierto, creado por Taylor Otwell y destinado al desarrollo de aplicaciones web siguiendo el patrón arquitectónico modelo-vista-controlador (MVC) y basado en Symfony. El código fuente de Laravel está alojado en GitHub y tiene licencia bajo los términos de la Licencia MIT.