用于开玩笑的表星座

时间:2015-04-09 17:13:40

标签: mysql laravel-4 eloquent

我正在空闲时间开发一个小型的网络应用程序,现在我想要开玩笑可以被用户收藏。

我的表是:

----------------
| jokes        |
----------------
| id
| author_id
| content

----------------
| favorites    |
----------------
| id
| joke_id
| user_id

(当然有更多的表,比如users表,但不是必需的)

我现在不知道如何在模型中建立关系。 我的目标是检索登录用户喜欢的所有笑话,例如:

$favorites = Joke::wherePivot('user_id', Auth::user()->id)->get();

这样我就可以使用笑话来访问属性了:

$jokes = Joke::all();

在Blade模板引擎中

@foreach($jokes as $joke)
  {{ $joke->content }}
@enndforeach

任何最佳做法?我正在运行Laravel Framework版本4.2.17。

2 个答案:

答案 0 :(得分:0)

我会按照以下方式创建收藏夹表:

joke_id | USER_ID

将主键放在两个字段上。 如果你想做到完美"在分别指向笑话和用户表的各个字段上放置一个单独的外键。

每次登录用户收到笑话时,都会存储joke_id和user_id。

检索

SELECT j.*
FROM jokes j 
INNER JOIN favorites f ON j.id=f.joke_id
WHERE f.user_id= $userId

使用Laravel Query Builder:

DB::table('jokes')
            ->join('favorites', 'jokes.id', '=', 'favorites.joke_id')
            ->where('favorites.user_id', '=', $userId)
            ->get();

答案 1 :(得分:0)

你可以使用mysql查询 假设userid = u0001

SELECT j.id,j.author_id,j.Content,f.user_id
FROM jokes j 
JOIN favorites f 
ON j.id=f.jokeid
WHERE f.user_id='u0001'