首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查行是否存在,Laravel

检查行是否存在,Laravel
EN

Stack Overflow用户
提问于 2014-08-09 01:46:08
回答 3查看 58.2K关注 0票数 21

我有以下db结构:

代码语言:javascript
复制
items:
id, name, user_id

users table:
id, name

user_favorites table:
id, user_id, item_id

在我的项目固定链接页面上,我有一个‘添加到收藏夹’按钮,它会在user_favorites中插入一个新的行

我想能够将它替换为“从收藏夹中删除”按钮,如果用户已经在他们的收藏夹中。

我不明白这背后的逻辑--我是否需要检查user_favorites中是否存在具有当前用户id和固定链接项id的行?这对我不起作用:

代码语言:javascript
复制
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
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-09 01:56:28

你可能想要这样的东西:

代码语言:javascript
复制
$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
}
票数 36
EN

Stack Overflow用户

发布于 2015-12-10 17:09:35

我建议您使用exists()count()进行检查,而不是使用first()

最快的方法:

代码语言:javascript
复制
$result = DB::table('user_favorites')
    ->where('user_id', '=', Auth::user()->id)
    ->where('item_id', '=', $item->id)
    ->exists();

或者:

代码语言:javascript
复制
$result = DB::table('user_favorites')
    ->where('user_id', '=', Auth::user()->id)
    ->where('item_id', '=', $item->id)
    ->count();

SQL:

代码语言:javascript
复制
select count(*) as aggregate from `user_favorites` where *** limit 1

更快的方法:只选择id

代码语言:javascript
复制
$result = DB::table('user_favorites')
    ->where('user_id', '=', Auth::user()->id)
    ->where('item_id', '=', $item->id)
    ->first(['id']);

SQL:

代码语言:javascript
复制
select id from `user_favorites` where *** limit 1

正常方式:

代码语言:javascript
复制
$result = DB::table('user_favorites')
    ->where('user_id', '=', Auth::user()->id)
    ->where('item_id', '=', $item->id)
    ->first();

SQL:

代码语言:javascript
复制
select * from `user_favorites` where *** limit 1
票数 22
EN

Stack Overflow用户

发布于 2015-04-29 22:03:06

假设User_favorite是一个访问user_favorites表的模型

代码语言:javascript
复制
$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();
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25209302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档