/ / Obtenez tous les messages et vérifiez si l'utilisateur a aimé chaque message - laravel, laravel-4, eloquent

Obtenir tous les messages et vérifier si l’utilisateur a aimé chaque message - laravel, laravel-4, éloquent

J'essaie de créer une requête Eloquent qui récupère tous les messages et vérifie si l'utilisateur a aimé chacun de ces messages.

J'ai les modèles suivants:

Post.php

class Post extends Eloquent {

/**
* The database table used by the model.
*
* @var string
*/
protected $table = "posts";

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

public function likes()
{
return $this->hasMany("Like");
}
}

Like.php:

class Like extends Eloquent {

/**
* The database table used by the model.
*
* @var string
*/
protected $table = "likes";
}

Et votre typique User modèle aussi.

Ma structure de base de données est la suivante:

posts table:

+----+---------+---------+
| id | user_id | message |
+----+---------+---------+

users table:

+----+----------+
| id | username |
+----+----------+

likes table:

+----+---------+---------+
| id | post_id | user_id |
+----+---------+---------+

À l'heure actuelle, ma requête ne renvoie que tous les messages, mais comment puis-je la modifier pour renvoyer tous les messages et vérifier si l'utilisateur a aimé chaque message?

Route::get("/", array("as" => "index", function()
{
$posts = Post::all();

return View::make("index")->with("posts", $posts);
}));

Merci!

Réponses:

1 pour la réponse № 1

Qu'en est-il d'une jointure gauche entre la table des publications et la table des likes, filtrée par l'ID de l'utilisateur réel?

$post = DB::table("post")
->select(DB::raw("message, likes.user_id IS NOT NULL as liked"))
->leftJoin("likes", "users_id", "=", "likes.user_id")
->where("likes.user_id", "=", $curent_user_id)
->get();

Je n'ai aucun moyen de le tester maintenant, mais j'espère que cela pourrait vous donner de l'inspiration :)


0 pour la réponse № 2

Vous pouvez saisir le likes avec la publication pour cet utilisateur spécifique. Essaye ça..

Post::with(["likes" => function() use ($user_id) { $q->where("user_id","=", $user_id); }])->all();

Il renverra un tableau vide si l'utilisateur n'aime pas la publication.