plantillas - laravel foreach index
Elocuente: no tiene parĂ¡metro (3)
Tengo los siguientes modelos elocuentes:
Usuario | carné de identidad
Publicar | carné de identidad
Comentario | id | post_id | identidad de usuario
Usando elocuente, ¿cómo puedo obtener todas las publicaciones que un usuario específico no ha comentado todavía?
Lo intenté hasta ahora:
En la publicación de modelo:
public function noCommentOf(User $user) { $this->hasNot(''App/Comment'')->commentOf($user); }
En el comentario del modelo:
public function commentOf($query, User $user) { return $query->where(''user_id'', ''='', $user->id); }
Creo:
$user->post()->leftJoin(''comments'', ''posts.id'', ''='', ''comments.post_id'')->whereNull(''comments.id'');
La forma en que haría esto es consultar el modelo de Post
con una relación whereDoesnthave
. En tu controlador:
public function getPostsWithoutCommenter(){
$userId = 1; // Could be `$user`, `use($user)` and `$user->id`.
$posts = /App/Post::whereDoesntHave("comments", function($subQuery) use($userId){
$subQuery->where("user_id", "=", $userId);
})->get();
}
Esto supondría que los comments
se definen en el modelo de Post
como:
public function comments(){
return $this->hasMany(Comment::class);
}
Básicamente, si la relación de comments
con el cheque para ese $userId
devuelve una Collection
, se $userId
desde el conjunto de resultados.
Modelo de publicación
public function comments()
{
return $this->hasMany(Comment::class)
}
Luego consigue publicaciones
$posts = Post:: whereDoesntHave(''comments'', function ($query) use ($userId) {
$query->where(''user_id'', $userId);
});
Para obtener publicaciones sin comentarios
$posts = Post::has(''comments'', ''='', 0)->get();