Laravel搜索' LIKE'在两个表中查询

时间:2015-02-17 00:30:11

标签: php sql search laravel eloquent

我目前正在尝试设置一个搜索栏,用于过滤两个表格的结果,图书类别

我为两个模型建立了关系:

Book.php(模型)(表:id,b_name,b_author,cat_id)

public function bookCategory()
{
  return $this->belongsTo('Category', 'cat_id', 'id');
}

Category.php(Model)(table:id,cat_name)

public function book()
{
  return $this->hasMany('Book', 'cat_id', 'id');
}

BookController.php

public function getFilterBooks($input)
{
  $books = Book::with('bookCategory')->where('**cat_name at category table**. 'LIKE', '%' . $input . '%'')->get();

  return Response::json($books);
}

但显然这不会奏效。我这样做的原因是因为我想允许用户使用相同的搜索栏来过滤不同的列(我知道如何在一个表中执行此操作,而不是两个或更多)。

1 个答案:

答案 0 :(得分:9)

你可以使用它。

Book::whereHas('bookCategory', function($q) use ($input)
{
    $q->where('cat_name', 'like', '%'.$input.'%');

})->get();

http://laravel.com/docs/4.2/eloquent#querying-relations

中查看详情

编辑:

Book::with('bookCategory')->whereHas('bookCategory', function($q) use ($input)
    {
        $q->where('cat_name', 'like', '%'.$input.'%');

    })->get();

你从关系中得到cat_name