Laravel口才来自2表的条件

时间:2019-07-02 00:13:17

标签: mysql laravel eloquent

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

我有2个表图书表和反馈表。

这些表用于用户在其中提供有关某本书的反馈的网站,一旦用户留下了该书的反馈,我就不再希望该书出现在该用户的书结果中,那么会有很多用户留下同一本书的反馈意见。

一本书可以有很多反馈

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

我不确定该怎么做?

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

我的books表看起来像这样:    ID    用户身份    标题

我将按照以下方式获取图书结果。

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

我需要一些可以检查用户是否对书有反馈的条件,然后不要在结果中显示用户已经对书保留反馈的书。

2 个答案:

答案 0 :(得分:0)

只需查询以下内容:反馈为空,如果为空则将有结果,如果不是,则不会有结果,因此请使用是否询问反馈是否为空

    $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);

答案 1 :(得分:0)

假设您在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();