laravel - index - que es el motor de plantillas blade




Elocuente: no tiene parámetro (2)

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.





eloquent