我有一个显示书名的列表,用户可以在其中留下反馈。
我有2个表图书表和反馈表。
这些表用于用户在其中提供有关某本书的反馈的网站,一旦用户留下了该书的反馈,我就不再希望该书出现在该用户的书结果中,那么会有很多用户留下同一本书的反馈意见。
一本书可以有很多反馈
我想做些事情,例如,如果用户已经在反馈表中留下了反馈,那么他们留下反馈的那本书就不会出现在结果中。
我不确定该怎么做?
我的反馈表如下所示: ID book_id 评分 反馈 user_id
我的books表看起来像这样: ID 用户身份 标题
我将按照以下方式获取图书结果。
$books = Books::where('user_id', $id)->get();
我需要一些可以检查用户是否对书有反馈的条件,然后不要在结果中显示用户已经对书保留反馈的书。
答案 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();