Laravel中带有2个外键的搜索栏

时间:2019-06-10 13:10:30

标签: php sql laravel eloquent

在文件夹SELECT count(*) FROM table1上的搜索栏中,我想在表book.index.blade.php的{​​{1}}或表的字段name上进行搜索authors

enter image description here

到目前为止,我知道要在我的表code的字段bookcases上进行搜索。 我的问题是如何使用表name的字段authors进行请求?我不知道语法... 我是新手。

code

3 个答案:

答案 0 :(得分:1)

您可以在搜索中附加更多其中有个条件,例如:

$books = Book::whereHas('authors', function($query) use($req) {
        $query->where('name', 'like', '%' . $req->search . '%');
    })->whereHas('bookcases', function($query) {
        $query->where('code', 'like', '%' . $req->search . '%');
    })->paginate(5);

如果您想在书架中搜索作者,则可以将第二个 whereHas 更改为 orWhereHas

obs :我建议您进一步了解Laravel雄辩地关联对象的方式。它具有学习曲线,但肯定会在将来有所帮助。

答案 1 :(得分:1)

看看这个Search on Eloquent Relationships

否则,您也可以使用联接来执行此操作:

Book::join('authors', 'books.fk_author', 'authors.id')
    ->join('bookcases', 'books.fk_bookcase', 'bookcases.id')
    ->where('authors.name', 'LIKE', '%'. $req->search . '%')
    ->select('authors.name', 'table.other_column', 'table.another_column')
    ->paginate(5);

添加提示,或者如果您进行多次搜索,则使用这样的方法更为可靠:

->where(function ($query) {

    $query->orwhere('users.name', 'like', '%' . request('search') . '%')
        ->orWhere('users.id', 'like', '%' . request('search') . '%');
})

答案 2 :(得分:1)

您可以尝试以下操作:

restructuring books table to:
id
title
gender
author_id
bookcases_id


public function index(Request $req) 
{
   $s = $req->input('data');
    $data['search']=DB::table('books')
    ->leftjoin('authors', 'books.author_id', '=', 'authors.id')
    ->leftjoin('bookcases', 'books.bookcases_id', '=', 'bookcases.id')
    ->where('books.id','=',$s)
    -orWhere('bookcases.id','=',$s)

    return view('admin.books.index', $data);

}

希望这会有所帮助。这是查询生成器。只需导入use DB;