我正在空闲时间开发一个小型的网络应用程序,现在我想要开玩笑可以被用户收藏。
我的表是:
----------------
| 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。
答案 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'