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 № 1Qu'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.