我有以下db结构:
items:
id, name, user_id
users table:
id, name
user_favorites table:
id, user_id, item_id
在我的项目固定链接页面上,我有一个‘添加到收藏夹’按钮,它会在user_favorites
中插入一个新的行
我想能够将它替换为“从收藏夹中删除”按钮,如果用户已经在他们的收藏夹中。
我不明白这背后的逻辑--我是否需要检查user_favorites
中是否存在具有当前用户id和固定链接项id的行?这对我不起作用:
if (Auth::user()->id) {
if (!is_null(DB::table('user_favorites')->where('user_id', '=', Auth::user()->id)->where('item_id', '=', $item->id)->first())) {
// remove from favorites button will show
}
}
发布于 2014-08-09 01:56:28
你可能想要这样的东西:
$user_favorites = DB::table('user_favorites')
->where('user_id', '=', Auth::user()->id)
->where('item_id', '=', $item->id)
->first();
if (is_null($user_favorites)) {
// It does not exist - add to favorites button will show
} else {
// It exists - remove from favorites button will show
}
发布于 2015-12-10 17:09:35
我建议您使用exists()
或count()
进行检查,而不是使用first()
。
最快的方法:
$result = DB::table('user_favorites')
->where('user_id', '=', Auth::user()->id)
->where('item_id', '=', $item->id)
->exists();
或者:
$result = DB::table('user_favorites')
->where('user_id', '=', Auth::user()->id)
->where('item_id', '=', $item->id)
->count();
SQL:
select count(*) as aggregate from `user_favorites` where *** limit 1
更快的方法:只选择id
$result = DB::table('user_favorites')
->where('user_id', '=', Auth::user()->id)
->where('item_id', '=', $item->id)
->first(['id']);
SQL:
select id from `user_favorites` where *** limit 1
正常方式:
$result = DB::table('user_favorites')
->where('user_id', '=', Auth::user()->id)
->where('item_id', '=', $item->id)
->first();
SQL:
select * from `user_favorites` where *** limit 1
发布于 2015-04-29 22:03:06
假设User_favorite
是一个访问user_favorites
表的模型
$result = User_favorite::where('user_id',Auth::getUser()->id)
->where('item_id',$item->id)
->first();
if (is_null($result)) {
// Not favorited - add new
User_favorite::create(['user_id'=>Auth::getUser()->id,'item_id'=>$item->id]);
} else {
// Already favorited - delete the existing
$result->delete();
}
https://stackoverflow.com/questions/25209302
复制相似问题