用户应该能够为多本书设置评级,它允许用户只为一本书设置评级,而不为任何其他书设置评级。
问题
用户无法对
另一本书。但是,另一个用户
可以对同一本书进行评级,但不能对
其他的书。即使用户注销也不行。
我在用
rateYo
和
laravel-ratable
我的设置方式,评分
type
默认设置为false,允许用户设置星号并进行评级。
再一次,一旦用户对任何一本书进行评级,不管是哪一本,评级
类型
设置为true将禁用用户设置星号。
这是我有的
下面是html设置的样子
HTML格式
<div id="rateYo" data-rateyo-rating="{{ $book->userSumRating or 0}}" data-rateyo-read-only="{{ $book->rated ? 'true' : 'false' }}"></div`>
BookController.php文件
public function rate(Request $request, $book_id)
{
$book = Book::find($book_id);
$rating = $book->ratings()->where('user_id', auth()->user()->id)->first();
if(is_null($rating)){
$ratings = new Rating();
$ratings->rating = $request['rating'];
$ratings->user_id = auth()->user()->id;
$ratings->type = Book::RATED;
$book->ratings()->save($ratings);
return json_encode($book);
}
else{
return response()->json(['status' => 'You already left a review']);
}
}
public function show($book_name)
{
$books = Book::GetBook($book_name)->get();
$data = $books->map(function(Book $book){
$book['rated'] = $book->type;
return $book;
});
return view('books.show', compact('data', $data));
}
Book.php文件
(相关代码)默认情况下,如果未设置分级,则type等于false允许用户进行分级,如果设置了分级,则type等于true禁用星型功能/读取模式。
use Rateable;
const RATED = "true";
const NOT_RATED = "false";
protected $fillable = [ 'user_id', 'title', 'description'];
protected $appends = ['rated'];
public function getRatedAttribute()
{
return Rate::where('type', $this->owl() )->where('user_id', auth()->user()->id )->first();
}
public function owl(){
foreach($this->rate as $rates){
if ($rates->type != "true"){
return self::NOT_RATED;
}
}
return self::RATED;
}
public function rate()
{
return $this->hasMany('App\Rate', 'type', 'user_id');
}