根据Laravel Project

时间:2018-05-29 11:12:19

标签: laravel pivot

嘿伙计在一个客户的新项目中,我必须为具有流派的书籍制作过滤系统。

我已经建立了多对多关系和数据透视表。到目前为止,我已经使用复选框创建了表单,因为目标是查询两个或更多类型的组合,并仅显示包含所有选定类型的结果。

我的迁移是:


    Schema::create('genres', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name', 40);
                $table->timestamps();
            });


    Schema::create('books', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name', 125);
                $table->timestamps();
            });


    Schema::create('book_genre', function (Blueprint $table) {
                $table->increments('id');

                $table->integer('genre_id')->unsigned();
                $table->foreign('genre_id')->references('id')->on('genres')->onDelete('cascade');

                $table->integer('book_id')->unsigned();
                $table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');

                $table->timestamps();
            });

我的模特是:


    class Book extends Model{
        public function genres(){
            return $this->belongsToMany('App\Genre', 'book_genre');
        }
    }

这是我的控制器,我在其中获取带有流派ID的Get数组:


    class FilterController extends Controller
    {

      public function index()
      {
        $genreIds = Input::get('genres');

        $books = Book::whereHas('genres', function($q) use ($genreIds){$q->whereIn('genres.id', $genreIds);})->orderBy('created_at', 'desc')->paginate(10);
      }

      return view('filter.index', compact('books'));

    }

这里的问题是它没有通过类型的组合过滤结果,只是在它们有一个类型的情况下过滤它们。

我应该更改哪些内容,以便我只能查询列出所列类型的匹配书籍?

1 个答案:

答案 0 :(得分:2)

class App extends Component{

    constructor(props){
        super(props);
        this.state = {
            value: ''
        }

        onValueChange = thisonValueChange.bind(this);
    }

    onValueChange(e) {
        e.preventDefault();
        setState({
            value: e.target.value
        });
    }

    render(){
        return(
            <Input value={this.state.value} onChange={this.onValueChange} />  
            <Output value={this.state.value}/>  
        );
    }

}

Input = (props) => { 
    <input value={props.value} onChange={props.onValueChange}>
} 


Output = (props) => <div>{props.value}</div>);

我在Stackoverflow

中找到了相同的解决方案