【问题标题】:Laravel Eloquent Where Condition from 2 tables来自 2 个表的 Laravel Eloquent Where 条件
【发布时间】:2023-03-18 10:21:02
【问题描述】:

我有一个书名列表,用户可以在其中留下反馈。

我有 2 个表 Books 表和反馈表。

这些表格适用于用户对一本书提供反馈的网站,一旦用户对该书留下了反馈,我不再希望该书出现在该用户的图书搜索结果中,有很多用户会为同一本书留下反馈。

一本书可以有很多反馈

我想做一些事情,比如如果用户已经在反馈表中留下了反馈,那么他们留下反馈的那本书不应该出现在结果中。

我不知道该怎么做?

我的反馈表如下所示: ID book_id 评分 回馈 user_id

我的书桌是这样的: ID 用户身份 标题

我拉书结果如下。

$books = Books::where('user_id', $id)->get();

如果用户已经为这本书留下了反馈,我需要一些东西来检查条件,然后不要在结果中显示用户已经留下反馈的书。

【问题讨论】:

  • user_id 在书桌上做什么?
  • 分享你的表架构
  • @userNotFound books表中的user_id是为了标识推荐这本书加入到书评列表的用户

标签: mysql laravel eloquent


【解决方案1】:

只需查询反馈为空的地方,如果它为空,它将有一个结果,如果不是,它当然不会有结果,所以使用 if 来询问反馈是否为空

    $feedback = Feedback::where('user_id', $id)->get();

    $feed = '';

    if(!empty($feedback->feedback)){
        $feed = $feedback;
    }

    return view('yourview')->with('feed', $feed);

如果你有连接表,你也可以这样做。放在你的上层控制器上

    use DB;
    $feedback = DB::table('feedback as f')
                ->join('books as b', 'b.id', '=', 'f.book_id')
                ->join('user as u', 'user.id', '=', 'u.id')
                ->where('u.id',$id)
                ->select('u.*','f.*','b.*')->get();

    $feed = '';

    if(!empty($feedback->feedback)){
        $feed = $feedback;
    }

    return view('yourview')->with('feed', $feed);

【讨论】:

    【解决方案2】:

    假设你在你的Books 模态中有这样的关系

    public function feedback(){
     return $this->hasMany(Feedback::class,'book_id','id');
    }
    

    要获取用户 ID 为 $id 且至少有一个反馈的所有书籍,您的查询应该是这样的

     $books = Books::where('user_id', $id)->has('feedback')->get();
    

    如果您需要更多过滤器,您可以使用whereHas 而不是has,这将允许您运行更多查询。

    更新

    要获得用户 ID 为 $id 的用户没有反馈的图书,会喜欢这样。

     $books = Books:: whereDoesntHave('feedback',function($q) use($id){
      $q->where('user_id',$id);
    })->get();
    

    但是,如果您想获取 ID 为 $id 的用户的所有书籍,而他没有也没有任何反馈

     $books = Books::where('user_id', $id)-> whereDoesntHave('feedback',function($q) use($id){
          $q->where('user_id',$id);
        })->get();
    

    【讨论】:

    • 我想反其道而行之,只显示没有来自该用户的反馈的图书。
    猜你喜欢
    • 2015-09-10
    • 2021-07-12
    • 2019-06-10
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多